Also spracht Peter Amstutz (Tue, 18 Mar 2008 11:09:24 -0400): > On Mon, Mar 17, 2008 at 07:33:24PM +0000, Lalo Martins wrote: >> Well. I spun off the web MVC stuff into a new library (hypervos). >> That opened a pandora box of generator fun :-) > > Yea, as you've probably figured out by now, writing good C++ is hard, > but automatically generating good C++ is even harder.
:-D >> 2: The #define guards use only the file name. If you have headers with >> the same name in different libraries (eg MVC.hh)... you get my point I >> think. I manually changed them to eg #define _hypervos_MVC_hh_, might >> make the change in the generator later. > > Oops. Yes, the generator should be smarter than that. See my comment > below about directory organization for headers. Fixed in my branch (assuming we agree _hypervos_MVC_hh_ is good enough). >> 3: Much worse happens if you have namespaces with the same name :-) the >> generated code has things like MVC::View all over, which of course >> generate "ambiguous namespace reference" errors galore. > > This is a bit of a pathalogical case, although hopefully now you see the > reason for the site_xxx namespace. > > The brute force solution would be to have the generator go ahead and > qualify everything with the excessively long site_xxx namespace, which I > was trying to avoid purely for the sake of readability. Ah no, you're taking it a step further. I'm referring to VOS Namespace objects, not C++ namespaces in general. See, you already solved this problem ;-) since we encourage each library to ship one Library object, named the same as the library, and then a number of Namespace objects inside it. Splitting a (VOS) Library in different (C++) libraries and/or directories would, yes, be a problem, but we'll cross that bridge when there is even water on the river ;-) What I'm talking about is... - Site 0011223344556677889900aabbccddee - Library vos - Namespace MVC - Site 6879706572766f73203474656877696e - Library hypervos - Namespace MVC See? So that could be handled in C++ (and it's how I solved it by manually editing the files, but that means I can't atm run the generator on mod_vos or my other project) by qualifying it with vos::MVC:: or hypervos::MVC:: >> 4: This is unrelated to the hypervos move, I noticed it earlier. If my >> class "Foo" extends "vos::core::Bar", then Foo.hh will have #include >> "Bar.hh" >> which of course won't work so well... should be <vos/Bar.hh> :-) > > Since I was originally focused on getting the libvos core to work, I > didn't give too much thought to how the C++ headers should be explictly > organized into directories. Again, the brute force solution would be to > have the headers mimic the namespace up to and including the site, which > would be horribly verbose but would eliminate most of the ambigious > cases. Again, you're forgetting we already have the handy Library object, which I'd like to encourage developers to keep unique-ish. So <vos/Bar.hh> would do it (and, bonus of bonuses, already works with our current layout!), and it's what I made the generator do, in my branch. best, Lalo Martins -- So many of our dreams at first seem impossible, then they seem improbable, and then, when we summon the will, they soon become inevitable. ----- http://lalomartins.info/ GNU: never give up freedom http://www.gnu.org/ _______________________________________________ vos-d mailing list vos-d@interreality.org http://www.interreality.org/cgi-bin/mailman/listinfo/vos-d