Code: Alles auswählen
// header (*.h)
class pimpl_interface
{
// delete assignment operator
pimpl_interface& operator =(const pimpl_interface&); // C++11: = delete;
public:
virtual ~pimpl_interface() { }
};
class foo : public pimpl_interface
{
// hide constructors to block alternative implementations via inheritance
foo() { }
foo(const foo&) { }
public:
// allow for one internal implementation
class M;
// public methods
void publicMethod();
};
std::unique_ptr<foo> createFoo(...);
// implementation (*.cpp)
class foo::M : public foo
{
// attributes
int i;
// private methods
void privateMethod()
{
++i;
}
};
// public methods
void foo::publicMethod()
{
M &m = static_cast<M&>(*this);
m.privateMethod();
++m.i;
}
std::unique_ptr<foo> createFoo(...)
{
return unique_ptr<foo>( new foo::M(...) );
}