使用 Boost Python 在构造函数中使用包含嵌套私有 class 的构造函数公开 class

Exposing a class with a constructor containing a nested private class in constructor using Boost Python

我是 Boost Python 的新手,我想公开一个 class,它看起来像这样:

///Header File structure
class A
{ public:
    A();
    ~A();
    void B();
  private:
    class Impl;
    std::unique_ptr Impl impl_;
};
///Class Implementation
class A::Impl
{
  public:
  void C();    
}
A::A():impl_(new Impl)
{
}
A::~A()
{
}
void A::B()
{
void C();
}

有人可以建议怎么做吗,因为我尝试过的当前方法会出错,因为 Impl 是私有的,而且还有一个访问已删除的函数错误:

BOOST_PYTHON_MODULE(libA)
 {
class_<A::Impl>("Impl")
  .def("C", &A::Impl::C)
class_<A>("A",init<std::unique_ptr>)
  .def("B", &A::B)
  }

pimpl 习语的全部意义在于它是私有的并且对 class 的用户完全透明。你不要暴露它。

您需要做的是明确指出 A 不可复制:

class_<A, noncopyable>("A", init<>())
    .def("B", &A::B)
;