std.mixins
Philippe Sigaud
philippe.sigaud at gmail.com
Wed Sep 1 12:51:24 PDT 2010
On Wed, Sep 1, 2010 at 15:25, Simen kjaeraas <simen.kjaras at gmail.com> wrote:
> Philippe Sigaud <philippe.sigaud at gmail.com> wrote:
>
> I also have a template that gets the list of all members of an aggregate
>> type (classes, structs and, well, modules, in a way), even the
>> constructors,
>> even the overloaded members, separated by type, and list them with their
>> names and associated type. It even gets the types aliases and unittests,
>> though I don't know what to do with the latter. That was part of a project
>> to duplicate a type: generate a new type with this extracted info. I had
>> vague projects to transform the methods into their const equivalent for
>> example or to render the fields immutable, but didn't get that far. Would
>> that be interesting to someone?
>>
>
> I could imagine extracting the unittests could be useful for making a
> unittest system. Are they only included when passing -unittest?
>
Hmm, don't know. Let see:
import std.stdio;
class C
{
int i;
unittest
{
assert(true);
writeln("Hello World!");
}
}
void main() {
writeln([__traits(allMembers, C)]);
writeln(typeof(C.__unittest1()).stringof);
C.__unittest1();
}
No, compile this with and without -unittest, and __unittest1 is present. Oh,
btw, contrary to the docs __traits(getOverloads, T) works also for structs
and modules, not only classes.
The unittests type is void delegate(), which is coherent with them being
blocks of instructions. You can even call it like a function (see the last
line of main).
Strange, I never could get that to work... Maybe I didn't try this with a
class.
Philippe
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.puremagic.com/pipermail/digitalmars-d/attachments/20100901/95b22cdf/attachment-0001.html>
More information about the Digitalmars-d
mailing list