Boost :: Python Forward声明boost :: python :: object抛出python TypeError

时间:2012-04-05 14:01:21

标签: c++ python boost boost-python

我正在尝试重构我的项目的一部分,特别是Python / C ++接口。 标准的boost :: python python初始化在以前工作:

boost::python::object main_module = boost::python::import("__main__");
boost::python::object globals(main_module.attr("__dict__"));

// ...

然而,在将其分解为自己的类之后,我得到了

TypeError: No to_python (by-value) converter found for C++ type: boost::python::api::proxy<boost::python::api::attribute_policies>

实例化PyInterface对象时,如下所示:

namespace py = boost::python;
class PyInterface
{
private:
    py::object
        main_module,
        global,
        tmp;
    //...
public:
    PyInterface();
    //...
};

PyInterface::PyInterface()
{
    std::cout << "Initializing..." << std::endl;
    Py_Initialize();
    std::cout << "Accessing main module..." << std::endl;
    main_module = py::import("__main__");
    std::cout << "Retrieve global namespace..." << std::endl;
    global(main_module.attr("__dict__"));
    //...
}

//in test.cpp
int main()
{
    PyInterface python;
    //...
}

Running gives the following output:
Initializing...
Accessing main module...
Retrieving global namespace...

TypeError: No to_python (by-value) converter found for C++ type: boost::python::api::proxy<boost::python::api::attribute_policies>

我唯一能想到的是它与使用它之前声明“全局变量”有关。在这种情况下,还有另一种方法可以做到这一点吗?

1 个答案:

答案 0 :(得分:0)

啊!固定它。

更改构造函数中对globals的调用
globals(main_method.attr("__dict__"));

改为使用赋值运算符:

globals = main_method.attr("__dict__");

回想起来,这似乎是非常明显的,但至少我知道我并不是唯一一个难以判断的人,因为没有人在努力。