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

时间:2016-10-10 22:21:29

标签: python c++ class boost boost-python

我是Boost Python的新手,我正在寻找一个看起来像这样的类:

///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)
  }

1 个答案:

答案 0 :(得分:1)

pimpl习语的重点在于它是私有的,对班级用户完全透明。你不暴露它。

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

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