Den 26-08-2011 14:38, Adam Ruppe skrev:
My pet feature request could do this too. User defined attributes
combined with a list of functions called by a function.

===

@custom("mysafe") void foo() {}
void bar() {}

@custom("mysafe") void main() {
    foo();
    bar();
}

CheckCustomSafety!("mysafe", main);

template CheckCustomSafety(string attribute, alias func) {
     static if(!__traits(hasCustomAttribute(func, attribute))
            pragma(error, func.stringof ~ " is not " ~ attribute);

       foreach(f; __traits(getCalledFunctions, func))
             CheckCustomSafety!(attribute, f);
}

====

Couldn't this be used for marking classes as serializable. Something like this:

class Foo {

        @custom("serialize") Cake theCake;
        Bar cache;
}

SerializeCustom!("serialize", Foo);

template SerializeCustom(string attribute, alias cls) {
        foreach (m; __traits(listMembers, cls)) {
                static if ( __traits(hasCustomAttribute(attribute, m) ) {
        Serializer.register(cls, m);
}

        }
}

----------

Though I would prefer if you could just write:
@custom("serialize") class Foo { ... }

instead of:
SerializeCustom!("serialize", Foo);

/Jonas



Reply via email to