D RTTI?
Justin Whear
justin at economicmodeling.com
Mon Mar 5 12:41:53 PST 2012
On Mon, 05 Mar 2012 12:16:14 -0800, H. S. Teoh wrote:
> I know D doesn't really have RTTI yet, but I'm experimenting with
> "faking" it by doing something like:
>
> class A {
> string prop1;
> int prop2;
> ...
> void serialize() {
> __serialize(this);
> }
> }
>
> void __serialize(T)(T obj) {
> writeln(typeid(obj));
> foreach (name; __traits(derivedMembers, T)) {
> writefln("%s = %s", name,
> __traits(getMember,obj,name));
> }
> }
>
> The only thing is, serialize() has to be declared in every derived
> class, because T needs to be known at compile-time. Is there a way to
> "automate" this? I.e., automatically insert the serialize() boilerplate
> code into derived classes?
>
> (P.S. D just took on brand new levels of cool when I realized I could
> do something like this. Imagine doing this with C++ templates... ugh!
> What a painful thought!)
>
>
> T
The normal approach is to use a string mixin statement in each derived
class:
template Serializable()
{
enum Serializable = q{...your code here...};
}
class B : A
{
mixin(Serializable);
}
Unfortunately, I don't believe there's any mechanism to order derived
classes to automatically perform the mixin.
More information about the Digitalmars-d-learn
mailing list