Traits
luminousone
rd.hunt at gmail.com
Sat Oct 12 17:25:52 PDT 2013
On Saturday, 12 October 2013 at 23:48:56 UTC, Artur Skawina wrote:
> On 10/12/13 21:42, luminousone wrote:
>> On Saturday, 12 October 2013 at 11:50:05 UTC, Artur Skawina
>> wrote:
>>> template isBaseOf(BASE, C) {
>>> enum isBaseOf = {
>>> static if (is(C S == super))
>>> foreach (A; S)
>>> static if (is(A==BASE))
>>> return true;
>>> return is(C==BASE);
>>> }();
>>> }
>>
>> I like that! Avoids importing std.traits, And will correctly
>> handle interfaces as well.
>
> It's also buggy. A more useful version would be:
>
> template isBaseOf(BASE, C) {
> enum isBaseOf = {
> static if (is(C S == super))
> foreach (A; S)
> static if (isBaseOf!(BASE, A))
> return true;
> return is(C==BASE);
> }();
> }
>
> Sorry, didn't test this properly; going to blame the dlang
> is-expression docs.
> It's not like D has multiple inheritance, so using "base
> classes" (plural)
> is very misleading...
>
> artur
yea "is" can be a lil confusing, especially that "is( C S ==
super)" expression.
I take it that "is( C S == super)" is only the bases directly
listed for inheritance by the class and not the bases bases as
well? which is the reason for the change you made their?
That expression is weird lol.
More information about the Digitalmars-d-learn
mailing list