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