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.