Satisfying inheritence requirements
Steven Schveighoffer
schveiguy at yahoo.com
Wed Oct 10 08:20:29 PDT 2007
"Jason House" wrote
> Steven Schveighoffer Wrote:
>> Now, to give an example where an alias is needed to satisfy interface
>> requirements:
>>
>> > interface Foo{ int bar(); }
>> > class A { int baz(){return 1;} }
>> > class B : A, Foo{ alias A.baz bar;}
>> > void main(){}
>>
>> I don't think this will work, and the only way around it is:
>>
>> > class B : A, Foo{ int bar(){return baz();} }
>
>
> That's what I've been doing, but now that -profile is telling me bar is
> one of the largest time consumers in the program, I'm going back to trying
> to get aliasing to work (it was suggested on this mailing list in a past
> thread of the same title).
>
> Using the terms from your example, bar is called 10x more than any other
> function. The baz function is really simple (almost as simple as "return
> 1"). The total time per call is only 1 tick (microsecond). Maybe it's
> just a fluke with the profiling, or maybe it really is significant. I
> wanted to try the alias trick to see if it'd drop it in the overal
> profiler output.
A function that only calls another function and returns that result should
at LEAST be optimized to a call/ret instruction pair. A good compiler will
optimize it to a jump instruction. If the compiler is clever enough, it
will be inlined and you won't even notice that it is calling a different
function. I don't think that is your problem. If it's possible, you could
post the code or a trimmed down version that has the same problem, and
someone may have a good solution for you.
-Steve
More information about the Digitalmars-d-learn
mailing list