Idioma Pimpl com herança
Eu quero usar o idioma pimpl com herança.
Aqui está a classe pública base e sua classe de implementação:
class A
{
public:
A(){pAImpl = new AImpl;};
void foo(){pAImpl->foo();};
private:
AImpl* pAImpl;
};
class AImpl
{
public:
void foo(){/*do something*/};
};
E eu quero poder criar a classe pública derivada com sua classe de implementação:
class B : public A
{
public:
void bar(){pAImpl->bar();}; // Can't do! pAimpl is A's private.
};
class BImpl : public AImpl
{
public:
void bar(){/*do something else*/};
};
Mas não posso usar o pAimpl em B porque é privado.
Então, eu vejo algumas maneiras de resolvê-lo:
Crie o membro BImpl * pBImpl em B e passe-o para A com o construtor A adicional, A (AImpl *).Altere o pAImpl para ser protegido (ou adicione uma função Get) e use-o em B.B não deve herdar de A. Crie o membro BImpl * pBImpl em B e crie foo () e bar () em B, que usarão o pBImpl.Qualquer outra maneira?O que devo escolher?