digitalmars.D - RFC: A tailconst template
- =?ISO-8859-15?Q?S=F6nke_Ludwig?= (22/22) Feb 23 2008 Since tailconst support for class types is still missing, I decided to t...
- =?ISO-8859-15?Q?S=F6nke_Ludwig?= (3/16) Feb 27 2008 related bug report:
Since tailconst support for class types is still missing, I decided to try and clean up the many related workarounds in my code. The result after a few hours of trying to get the templates/ctfe-functions do what I want is a template which casts the const/invariant class reference to void* internally and defines proxy methods for all methods of the original class. This is already pretty transparent in usage. But there are some issues left: 1. __traits(allMembers, T) does not seem to list methods which have only const or invariant overloads: class C { const int myfunc(); } in this case __traits(allMembers, C) would be empty. If there is no specific reason for this, I'll file a bug report for this. 2. Support for public member variables is missing Currently, only methods are supported. Personally, I'm using public variables in classes pretty seldom. So this will come later. 3. Enums are reported as "int" by stringof Is there some other way to get the type identifier as a string at compile time? typeid(T).toString() works fine at runtime - but that doesn't help for compile-time code generation. (this would be http://d.puremagic.com/issues/show_bug.cgi?id=1610) PS: ignore the copyright notice in the attached code - this is public domain
Feb 23 2008
Sönke Ludwig wrote:1. __traits(allMembers, T) does not seem to list methods which have only const or invariant overloads: class C { const int myfunc(); } in this case __traits(allMembers, C) would be empty. If there is no specific reason for this, I'll file a bug report for this.related bug report: http://d.puremagic.com/issues/show_bug.cgi?id=1874
Feb 27 2008