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.