好吧,也许我找不到答案,因为我不确定如何表达,但我有一个名为 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>());
}
testPacket.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 对象的指针吗?
撒科打诨
相关分类