On Mon, 23 Jan 2012 01:33:47 +0100, Timon Gehr <[email protected]> wrote:

On 01/23/2012 01:07 AM, so wrote:
On Mon, 23 Jan 2012 01:39:23 +0200, so <[email protected]> wrote:

I have been asking that for some time now, i am afraid you won't get
much of an audience.
You can get rid of both additional allocation and indirection but it
is not pretty. We could definitely use some help/sugar on this.

http://www.artima.com/cppsource/backyard3.html

http://www.digitalmars.com/d/archives/digitalmars/D/Implementation_hiding_139625.html


There is another issue Walter forgot to mention in the article.
I think there might be a way but looks like we also loose the "destructor".
Which means we are all the way back to the
http://en.wikipedia.org/wiki/Opaque_pointer.

Walter, is there a way to get around destructor limitation?

This seems to work.

a.di:

final class A{
     private this();
     static A factory();
     T1 publicMember1(int x);
     T2 publicMember2(float y);
     T3 publicField;
     // ...
}

a.d:

class A{
     static A factory(){return new A;}
     T1 publicMember1(int x){ ... }
     T2 publicMember2(float y){ ... }
     T3 publicField;
     // ...
private:
     T1 field1;
     T2 field2;
}

This will even work with plain new/this, as the allocation is done
in the constructor. The difficulty is that you can't build inheritable pimpls.

Reply via email to