Traits

luminousone rd.hunt at gmail.com
Fri Oct 11 12:19:29 PDT 2013


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.


More information about the Digitalmars-d-learn mailing list