我希望使用pimpl技法并继承它。
这是基础公共类及其实现类:
class A
{
public:
A(){pAImpl = new AImpl;};
void foo(){pAImpl->foo();};
private:
AImpl* pAImpl;
};
class AImpl
{
public:
void foo(){/*do something*/};
};
我希望能够创建一个派生的公共类及其实现类:
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*/};
};
但我不能在B中使用pAimpl,因为它是A的私有成员。
所以我看到一些解决方法:
- 在B中创建BImpl* pBImpl成员,并通过额外的A构造函数A(AImpl*)将其传递给A。
- 将pAImpl更改为受保护的(或添加Get函数),并在B中使用它。
- B不应该继承自A。在B中创建BImpl* pBImpl成员,并在B中创建foo()和bar(),这将使用pBImpl。
- 还有其他方法吗?
A.h
,B.h
,AImpl.h
和BImpl.h
,可以解决您提到的问题吗? - javaLover