我是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)
}
答案 0 :(得分:1)
pimpl习语的重点在于它是私有的,对班级用户完全透明。你不暴露它。
您需要做的是明确A
不可复制:
class_<A, noncopyable>("A", init<>())
.def("B", &A::B)
;