我想知道这里是否有人可以帮助我解决我遇到的以下问题。
我似乎无法从c ++类创建一个boost :: python :: object我已经绑定到不可复制的python。这是一个简化的例子..
#include <boost/python.hpp>
class A
{
public:
static A*
create() {return new A;}
protected:
A(){}
};
void
doSomething(const A& a)
{
boost::python::object obj(a);
}
BOOST_PYTHON_MODULE(test)
{
boost::python::class_<A, boost::noncopyable>("A", boost::python::no_init)
.def("__init__", boost::python::make_constructor(&A::create));
boost::python::def("doSomething", &doSomething);
}
然后在python的运行时
import test
a = test.A()
test.doSomething(a)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: No to_python (by-value) converter found for C++ type: A
我意识到boost :: noncopyable参数阻止了A的to_python转换器被注册。有谁知道我怎么能从A实例创建一个boost :: python ::对象?
提前感谢!
答案 0 :(得分:2)
使用此
boost::python::object obj(**boost::cref(a)**);