我有一个创建C ++对象的函数。在重构之前,我从C ++函数返回一个指针,在boost python包装器声明中,我会使用boost::python::return_value_policy<boost::python::manage_new_object>
。像这样:
MyObject* create_object_from_description(std::string& description)
{
...
return myObject;
}
BOOST_PYTHON_MODULE(pymol) {
boost::python::def("create_obj_from_desc", create_object_from_description,
(boost::python::arg("description")),
"",
boost::python::return_value_policy<boost::python::manage_new_object>()
);
现在我需要返回的不仅仅是对象,还有一些错误消息,重构器基本上改变了C ++函数,让它返回一个元组:
boost::python::tuple create_object_from_description(std::string& description)
{
...
return boost::python::make_tuple(myObject, errmsg);
}
如何使用此更改指定退货政策?
答案 0 :(得分:1)
我不认为这是可能的。您可能需要做的是更改函数签名并在python中重新包装函数。像这样:
boost::python::tuple create_object_from_description(std::string& description,
MyObject& myObject)
{
myObject = mo;
return errmsg
}
然后在python中有这样的函数:
def create_object_from_description(description):
mo = MyObject()
errmsg = pymol.create_object_from_description(description, mo)
return mo, errmsg
当然,你应该真正做的是抛出异常。 Boost :: python可以很好地将c ++异常转换为python异常,反之亦然