Off Topic ! But in the same way:

-------
static string[] IDs;

ptrdiff_t getClassID(ClassType, ClassBase)()
if ((is(ClassType == class)) && (is(ClassBase == class)))
{
    import std.algorithm;
    if (!is(ClassType : ClassBase))
        return -1;
    else {
        auto classTypeString = ClassType.stringof;
        ptrdiff_t result = countUntil(IDs, classTypeString);
        if (result == -1) {
            IDs ~= classTypeString;
            result = IDs.length -1;
        }
        return result;
    }
}

void main(string[] args)
{
    class Oops {}
    class A : Oops{}
    class B : Oops{}
    class C : Oops{}
    class D : Oops{}
    class E {}

    assert(getClassID!(A,Oops) == 0);
    assert(getClassID!(B,Oops) == 1);
    assert(getClassID!(C,Oops) == 2);
    assert(getClassID!(D,Oops) == 3);
    assert(getClassID!(C,Oops) == 2);
    assert(getClassID!(B,Oops) == 1);
    assert(getClassID!(A,Oops) == 0);
    assert(getClassID!(E,Oops) == -1);
}
-------

Reply via email to