Traits

Gary Willoughby dev at nomad.so
Fri Oct 11 07:09:08 PDT 2013


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));
	}


More information about the Digitalmars-d-learn mailing list