Thread overview |
---|
April 28, 2003 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 |
July 13, 2003 Re: class hierarchy | ||||
---|---|---|---|---|
| ||||
Posted in reply to Dario | "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. |
July 14, 2003 Re: class hierarchy | ||||
---|---|---|---|---|
| ||||
Posted in reply to Walter | Dario: >> Is there a way to check if a class is derived from another? Walter: > 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! =) |
Copyright © 1999-2021 by the D Language Foundation