D - class hierarchy
Is there a way to check if a class is derived from another?
I mean something like "a.classinfo.isDerived(b.classinfo)".
Maybe object.d should include a function to do that.
I think it can be written as follows:
class ClassInfo
{
byte[] init;
char[] name;
void*[] vtbl;
Interface[] interfaces;
ClassInfo base;
void* destructor;
void function(Object) _invariant;
uint flags;
void* deallocator;
bit isDerived(ClassInfo c)
{
for(ClassInfo b=base; b!==Object.classinfo; b=b.base)
if(b === c)
return true;
return false;
}
}
I also have to advise the great confusion in the D math library.
"math.d" contains functions like "double pow(double,double)" and "real
pow(real,int)"
which inevitably conflicts with each other. Moreover I saw that the sin
function in "math.d"
is still the old C function, not the optimized D intrinsic one. These
conflicts together too.
I know that explicit casts can resolve any conflict, but I think that
explicit casts are
annoying and cumbersome. Why should "pow(3.0, 0.5);" be ambiguous?
Dario
Apr 28 2003
"Dario" <supdar yahoo.com> wrote in message news:b8kabs$75t$1 digitaldaemon.com...Is there a way to check if a class is derived from another?Yes. Try a down cast, if it produces a non-null value it is derived from the other. For example: class A { } class B : A { } int isB(A *a) { return cast(B)A !== null; }I also have to advise the great confusion in the D math library. "math.d" contains functions like "double pow(double,double)" and "real pow(real,int)" which inevitably conflicts with each other. Moreover I saw that the sin function in "math.d" is still the old C function, not the optimized D intrinsic one. These conflicts together too. I know that explicit casts can resolve any conflict, but I think that explicit casts are annoying and cumbersome. Why should "pow(3.0, 0.5);" be ambiguous?I agree that all needs work.
Jul 13 2003
Dario:Walter:Is there a way to check if a class is derived from another?Yes. Try a down cast, if it produces a non-null value it is derived from the other. For example: class A { } class B : A { } int isB(A *a) { return cast(B)A !== null; }Wow! =)
Jul 14 2003








Dario <Dario_member pathlink.com>