如何使用 Pimpl 向公共成员授予访问权限?

问题描述

  • 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 类(最终用户)的最佳实践?
    • 如果它们的名称与我在 struct MyStructstruct MyStructImpl (variable_struct / variable_struct_impl) 示例中的名称不同怎么办?

对于方法,这很清楚,无论如何我们都需要制作 forward 方法。 (在示例中,Foo() 转发给了 DoStuff()

解决方法

如何使用 Pimpl 向公共成员授予访问权限?

你没有。 PIMPL 的目的是隐藏 Private IMPLementation 的所有成员,而公开访问它们与这一点完全相反。

如果您想要公开访问,则不要将成员放入 PIMPL。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...