Is there a function in phobos which will return a Tuple of a Type's members, for use in a foreach statement?

I need this for collecting info on all Type Members's User Attributes. Currently, I have written a recursive function which does this, but I'm looking for a more elegant solution.

Let's say I have an Ship Actor class:

    class Ship : Actor
    {
        @Bind("Stage.update") void update()
        {
            // ...
        }

        @Bind("Canvas.draw") void draw()
        {
            // ...
        }
    }

and I want to iterator over all it's members.. and, in turn, iterate over all their attributes. If I use "__traits(derivedMembers, Ship)" it returns a Tuple of strings, which I can't use with __traits(getAttributes, ..). So what are my options here? Ideally, I'd like to be able to do this:

    auto ship = new Ship;
    enum mbrs = membersOf(Ship); // returns Tuple
    foreach (m; mbrs)
    {
        enum atrs = __traits(getAttributes, m);
        foreach (a; atrs)
        {
            if (is(a : Bind))
                Engine.bindActors(ship, a.pattern);
        }
    }

Like I said, I've already accomplished this using recursion. I'm just wondering if there's an easier way (like above). Also, if recursive functions are required, I'd love to hear ideas on the best way to write a general purpose recursive function for this kind of thing.

Reply via email to