如果C++对象的类在另一个boost模块中声明,如何使用boost将指向该对象的指针返回到python
How to return a pointer to a C++ object to python using boost if the class of that object is declared in another boost module?
好吧,也许我找不到答案,因为我不知道如何用词,但我有一个叫Info的类和另一个叫Packet的类,它们都是使用boost编译成Python扩展的,我想从Packet模块返回一个指向Info对象的指针。
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);
}
Packet.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对象的指针吗?
感谢
您只导入了Packet
。
您还需要导入Info
。
否则,正如错误所说,当p.test()
尝试使用它(或者,更具体地说,返回指向它的指针,分配给t
(时,Python无法识别它。
相关文章:
- 如果C++对象的类在另一个boost模块中声明,如何使用boost将指向该对象的指针返回到python
- 从 Boost ASIO 获取 epoll 描述符 io_service对象
- 将 boost 序列化对象的 asio::streambuf 表示转换为 Beast 的 DynamicBody req.body()
- 如何将来自 Boost.Python 的map_indexing_suite与自定义而不是标准对象一起使用?
- 如何复制 boost::aligned_storage 对象中的数据?
- 释放 boost::singleton_pool 中的所有对象
- 如何从 boost::container::vector<std::string>::iterator 访问索引和对象?
- 在 boost::heap::p riority_queue 中推送结构对象时出错
- 如何将任何值转换为对象并使用 boost::p roperty_tree json 添加成员
- 动态分配许多 Boost::直方图对象
- 在 boost::p ython 中的 python 对象中运行 python 代码
- 将动态分配对象传递到 boost::any 构造函数中
- 通过 Boost Python 在C++对象之间传递共享指针的隔离错误
- Boost.Python 返回引用现有 c++ 对象的 python 对象
- 使用BOOST :: PYTHON返回裸露的类对象列表,这些对象是不可复制的
- 重用 Boost 的计时器对象
- 使用boost :: python手动构建共享对象
- 如何在Boost Serialization中检索多个对象值
- Boost Intervocess:通过迭代通过从结构引用对象的映射进行迭代时
- C++Boost对象序列化-定期保存以保护数据