问题描述
- pimpl.h
#include <memory>
class MyClassImpl;
class MyClass {
void Foo();
struct MyStruct {
int a;
int b;
} variable_struct;
private:
std::unique_ptr<MyClassImpl> m_pImpl;
};
- pimpl.cpp
class MyClassImpl
{
public:
void DoStuff() { /*...*/ }
struct MyStructImpl {
int a;
int b;
} variable_struct_impl;
};
// MyClass (External/User interface)
MyClass::MyClass () : m_pImpl(new MyClassImpl()) { }
MyClass::~MyClass () = default;
void MyClass::Foo() {
m_pImpl->DoStuff();
}
- 如何/什么是将实现的公共成员共享给 Pimpl 类(最终用户)的最佳实践?
对于方法,这很清楚,无论如何我们都需要制作 forward 方法。 (在示例中,Foo()
转发给了 DoStuff()
)
解决方法
如何使用 Pimpl 向公共成员授予访问权限?
你没有。 PIMPL 的目的是隐藏 Private IMPLementation 的所有成员,而公开访问它们与这一点完全相反。
如果您想要公开访问,则不要将成员放入 PIMPL。