为什么不能使用std :: ref将对象传递给Boost.Python模块?

时间:2016-06-29 17:59:22

标签: python c++ boost boost-python boost-ref

环境:使用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::ref替换为std::ref,则会抛出boost::python::error_already_set个实例。

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

1 个答案:

答案 0 :(得分:0)

关于https://facebook.github.io/react/tips/initial-ajax.html的好文章。我认为python是异常AttributeError的任何方式,因为handling python exceptions in C++std库中的reference_wrapper实现存在差异。即使在公共界面中也可以看到差异。 std::reference_wrapper没有get_pointer()方法。