使用 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)
;
我是 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)
;