Boost logo

Boost Users :

Subject: Re: [Boost-users] Pimpl framework comments/suggestions
From: Rob Riggs (rob_at_[hidden])
Date: 2011-04-17 19:23:21

On 04/17/2011 10:49 AM, Clinton Mead wrote:
> I don't really understand what you mean by this. What part of the
> implementation has leaked into the interface?
Hi Clinton,

What leaks is the implementation of the Pimpl itself. A Pimpl consists
of two distinct things: the interface (which the user cares about), and
the pointer (which the user need not know about). The user should not
know or care that a class is implemented as a Pimpl.

> Maybe I've missed the point but what I'm trying to achieve is the
> opposite. With all the implementations of pimpl I've seen, the
> "pointer" is leaked into the interface. I'm just trying to unleak it
> and separate it. The idea is that people can write interfaces without
> having to specify how pimpl is actually implemented.
It seems to me that this flexibility is for the benefit of the Pimpl
writer, and at the expense of the Pimpl user.

 From your example code:

unique_pimpl<interface, impl>::create();


This forces the implementation upon the user. || create() is not part of
the interface -- it's part of the Pimpl implementation leaking through.

Isn't this much simpler and more natural for the user:

unique_ptr<Klass> foo(new Klass);

Nothing here tells the user that Klass is implemented as a Pimpl. And
that is as it should be.



Boost-users list run by williamkempf at, kalb at, bjorn.karlsson at, gregod at, wekempf at