KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I want to use pimpl idiom with inheritance. Here is the base public class and its implementation class: class A { public: A(){pAImpl = new AImpl;}; void foo(){pAImpl->foo();}; private: AImpl* pAImpl; }; class AImpl { public: void foo(){/*do something*/}; }; And I want to be able to create the derived public class with its implementation class: 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*/}; }; But I can't use pAimpl in B because it is A's private. So I see some ways to solve it: Create BImpl* pBImpl member in B, and pass it to A with additional A constructor, A(AImpl*). Change pAImpl to be protected (or add a Get function), and use it in B. B shouldn't inherit from A. Create BImpl* pBImpl member in B, and create foo() and bar() in B, that will use pBImpl. Any other way? What should I choose?
Tags (comma-separated)
Save Edits
Cancel