March 16, 2016 TypeInfo for highest type in hierarhy (class) when passed base type | ||||
---|---|---|---|---|
| ||||
How to handle this situation: module typeTest; class A{ void a(){} } class B:A{ int b(){ return 1; } } class C:B,D{ string c(){ return ""; } override int d() { return 0; } } interface D{ int d(); } TypeInfo __typeInfo(T)(T t){ return typeid(T); } unittest{ A a= new A; A b= new B; A c = new C; TypeInfo aInfo=__typeInfo(a); TypeInfo bInfo=__typeInfo(b); TypeInfo cInfo=__typeInfo(c); assert(aInfo!=bInfo); //fails assert(aInfo!=cInfo);//fails assert(bInfo!=cInfo);//fails } |
March 16, 2016 Re: TypeInfo for highest type in hierarhy (class) when passed base type | ||||
---|---|---|---|---|
| ||||
Posted in reply to Voitech | On 03/16/2016 01:03 AM, Voitech wrote: > How to handle this situation: > module typeTest; > > class A{ > > void a(){} > } > > class B:A{ > int b(){ > return 1; > } > > } > > class C:B,D{ > string c(){ > return ""; > } > override int d() { > return 0; > } > } > > interface D{ > int d(); > } > TypeInfo __typeInfo(T)(T t){ > return typeid(T); typeid() can take types and expressions. You need to replace T with t because T is always A in your tests. This works: typeid(t); Ali > } > > unittest{ > A a= new A; > A b= new B; > A c = new C; > > TypeInfo aInfo=__typeInfo(a); > TypeInfo bInfo=__typeInfo(b); > TypeInfo cInfo=__typeInfo(c); > > assert(aInfo!=bInfo); //fails > assert(aInfo!=cInfo);//fails > assert(bInfo!=cInfo);//fails > > } |
Copyright © 1999-2021 by the D Language Foundation