On Friday, 11 October 2013 at 19:19:31 UTC, luminousone wrote:
On Friday, 11 October 2013 at 14:09:09 UTC, Gary Willoughby wrote:
On Friday, 11 October 2013 at 05:49:38 UTC, luminousone wrote:
On Friday, 11 October 2013 at 04:13:55 UTC, Agustin wrote:
I have a function that needs to check if the template provided inherit a class.

For example:

public void function(T, A...)(auto ref A values)
{
// static assert(IsBaseOf(L, T));
}

Check if T inherit class "L". Same result that std::is_base_of<L, T>::value using C++. Any clean way to do it, without a dirty hack.

import std.traits;

bool ChildInheritsFromParent( parent, child )( ) {
        
        foreach ( k, t; BaseClassesTuple!child ) {
                if( typeid(t) == typeid(parent) )
                        return true;
        }
        return false;
}

A simpler way:

        import std.stdio;

        bool instanceOf(A, B)(B value)
        {
                return !!cast(A)value;
        }

        void main()
        {
                assert(1.instanceOf!(int));
        }

Using casts that way won't always be correct, it would be better to use reflection in some way if possible.

This is wrong for me because i don't have a value, i just wanted to check if a template parameter inherit a class at compile time.

bool instanceOf(A, B)();

Reply via email to