gpt4 book ai didi

python - 如果该对象的类在另一个 boost 模块中声明,如何使用 boost 将指向 C++ 对象的指针返回给 python?

转载 作者:行者123 更新时间:2023-12-02 10:00:27 27 4
gpt4 key购买 nike

好的,也许我没有找到答案,因为我不知道该怎么说,但是我有一个名为 Info 的类和另一个名为 Packet 的类,它们都使用 boost 编译成 Python 扩展,我想返回一个指向来自 Packet 模块的 Info 对象的指针。
信息.cpp

#include "info.h"
Info::Info(int i_, int j_){
this->i = i_;
this->j = j_;
}

Info::~Info(){
}

BOOST_PYTHON_MODULE(Info)
{
class_<Info>("Info", init<int, int>())
.def_readwrite("i", &Info::i)
.def_readwrite("j", &Info::j);
}

数据包.cpp:
Packet::Packet(int i_, int j_, PyObject* addr_, bool a_, bool b_){
this->i = i_;
this->j - j_;
this->addr = addr_;
this->a = a_;
this->b = b_;
}
// some other functions

Info* Packet::test(){
return new Info(1,2);
}
BOOST_PYTHON_MODULE(Packet)
{
class_<Packet>("Packet", init<int, int, PyObject*, bool, bool>())
/*some other functions*/
.def("test", &Packet::test, return_value_policy<reference_existing_object>());
}


测试包.py:
from Packet import *
# this works correctly
p = Packet(1,2, None, False, False)
# this crashes
t = p.test()

错误信息:
Traceback (most recent call last):
File "/usr/lib64/python3.6/runpy.py", line 193, in _run_module_as_main
"__main__", mod_spec)
File "/usr/lib64/python3.6/runpy.py", line 85, in _run_code
exec(code, run_globals)
File "/tmp/lirui/testPacket.py", line 5, in <module>
print(p.test())
TypeError: No Python class registered for C++ class Info

有什么方法可以返回指向 Info 对象的指针?
谢谢

最佳答案

你只导入了Packet .
您还需要导入Info .
否则,正如错误所说,Python 在 p.test() 时无法识别它。尝试使用它(或者,更具体地说,返回指向它的指针,分配给 t )。

关于python - 如果该对象的类在另一个 boost 模块中声明,如何使用 boost 将指向 C++ 对象的指针返回给 python?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62783884/

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