gpt4 book ai didi

c++ - Boost::Python 前向声明 boost::python::object 抛出 python TypeError

转载 作者:太空宇宙 更新时间:2023-11-04 14:17:36 29 4
gpt4 key购买 nike

我正在尝试重构项目的某些部分,尤其是 Python/C++ 接口(interface)。标准的 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>

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

最佳答案

啊!修复。

更改构造函数中对全局变量的调用

globals(main_method.attr("__dict__"));

改用赋值运算符:

globals = main_method.attr("__dict__");

回过头来看,这似乎是显而易见的,但至少我知道我不是唯一一个因为没有人对我感兴趣而感到难过的人。

关于c++ - Boost::Python 前向声明 boost::python::object 抛出 python TypeError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10030080/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com