On Sunday, 26 February 2012 at 21:03:11 UTC, Robert Klotzner wrote:

Yeah, I got that. What I don't get is why it needs to be a template?
Wouldn't a simple base class with a destructor suffice?

Indeed it would suffice. Nothing really special, i didn't want pimpl to be a "one true base class" that you could do things like:

vector<pimpl*> v;

Well my initial example was Qt. Take for example the QWidget class, you usually derive from it in order to implement custom widgets and with the PIMPL idiom it is ensured that your derived classes will not break upon addition of private fields in QWidget. It is a black box, a derived
class does not have access to private fields.

The whole purpose of my proposal is, to really hide private fields so
that not just the API is stable, but also the ABI.

I understand. My use case was that i needed an alternative to C way of doing it. I was thinking that C++/D got namespaces, modules, class/struct methods. It should be possible to improve C pimpl.

So instead of:
libFun(handle, ...);

You would do:
handle.fun(...);

Now you have a cleaner code, cleaner global namespace with zero cost.

Reply via email to