0

我有一个创建 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);
}

我应该如何指定此更改的退货政策?

4

1 回答 1

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 异常方面做得非常好,反之亦然

于 2011-02-01T17:04:04.507 回答