4

环境:使用 Python 3.5 编译的 Boost 1.61.0

以下 C++ 代码输出12

class A
{
public:
    int func() { return 12; }
};

BOOST_PYTHON_MODULE(bridge)
{
    using namespace boost::python;
    class_<A>("A", no_init)
        .def("func", &A::func);
}

int main()
{
    A a;
    PyImport_AppendInittab("bridge", PyInit_bridge);
    Py_Initialize();
    using namespace boost::python;

    dict dictMain = extract<dict>(import("__main__").attr("__dict__"));

    import("bridge").attr("a") = boost::ref(a);
    exec("import bridge", dictMain);
    exec("print(bridge.a.func())", dictMain);
}

但是,如果我替换boost::refstd::ref,则会抛出一个boost::python::error_already_set实例。

为什么不能std::ref在这里使用?

4

1 回答 1

0

关于在 C++ 中处理 python 异常的好文章。由于stdboost库中的实现AttributeError不同,我通过异常猜测python的任何方式。即使在公共界面中,您也可以看到差异。没有办法。reference_wrapperstd::reference_wrapperget_pointer()

于 2016-06-29T18:30:29.133 回答