|
Boost : |
Subject: Re: [boost] Pimpl Again?
From: Emil Dotchevski (emildotchevski_at_[hidden])
Date: 2016-05-31 17:57:17
On Tue, May 31, 2016 at 2:45 PM, Rob Stewart <rstewart_at_[hidden]> wrote:
> On May 31, 2016 5:10:35 PM EDT, Emil Dotchevski <emildotchevski_at_[hidden]>
> wrote:
> >
> >I'm not sure why
> >do you say that "my approach" doesn't support that. One possibility is
> >to use inheritance in the cpp file:
> >
> >header:
> >
> >struct foo { int critical_; };
> >shared_ptr<foo> create_foo();
> >inline void use_foo_critical( foo * p ) { ++p->critical_; }
> >void use_foo_not_so_critical( foo * )
>
> Were you leaving encapsulation as an exercise for the reader?
>
> class foo
> {
> public:
> use_critical () { ++critical_; }
> protected:
> int critical_;
> };
>
> Your foo_ can still access critical_.
>
Right, though my preference is as follows.
//Public interface:
namespace boost { template <class> class shared_ptr; }
class foo;
boost::shared_ptr<foo> create_foo();
void use_foo_critical( foo * );
void use_foo_not_so_critical( foo * );
//Implementation details:
class foo
{
foo( foo const & );
foo & operator=( foo const & );
int critical_;
friend void use_foo_critical( foo * );
protected:
foo();
~foo();
};
inline void use_foo_critical( foo * p ) { ++p->critical_; }
Emil
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk