Non-virtual private struct inheritance
monarch_dodra
monarchdodra at gmail.com
Thu Aug 23 06:25:38 PDT 2012
On Thursday, 23 August 2012 at 13:17:23 UTC, bearophile wrote:
> monarch_dodra:
>
>> In C++, it is a very common practice, when writing a struct
>> template, to have said template derive from a base
>> non-template struct. This makes sure there is no executable
>> bloat,
>
> "alias this" seems to help both for composition and against
> template bloat:
>
>
> struct Foo {
> int x;
> int bar() { return x * 2; }
> }
> struct Bar(T) {
> Foo f;
> T y;
> alias f this;
> }
> void main() {
> Bar!int b1;
> b1.x = 10;
> assert(b1.bar() == 20);
> Bar!double b2;
> b2.x = 100;
> assert(b2.bar() == 200);
> }
>
>
> In the asm listing there is only one bar:
>
> _D3foo3Foo3barMFZi:
> enter 4, 0
> mov EAX, [EAX]
> add EAX, EAX
> leave
> ret
>
>
> Another way to fight template bloat is the @templated() I have
> suggested elsewhere, that applied to something inside a
> template allows you to choose what that something is templated
> to (even nothing).
>
> Bye,
> bearophile
Thanks for the answer. Very nice. "alias this" is still the first
thing I think about, but in this case, it works perfectly well
actually.
More information about the Digitalmars-d
mailing list