如何在<object>python中从包装的c ++类中读取列表
How to read list<object> from wrapped c++ class in python
我已经在c++中封装了类,并向python公开,当我调用函数成员时,问题是我无法访问数据(类Path中的公共成员结果的类型为std::list
BOOST_PYTHON_MODULE(map) // module name
{
class_<Path>("Path")
.def_readonly("result", &Path::result)
.def("findPathFromTo", &Path::findPathFromTo);
class_<Position>("Position")
.def(init<float, float, float>())
.def_readwrite("x", &Position::x)
.def_readwrite("y", &Position::y)
.def_readwrite("z", &Position::z);
};
我像一样打电话
import map
path = map.Path()
path.findPathFromTo(2, 3, 34 ,34)
path.resultPath
最后一行抛出异常
TypeError: No Python class registered for C++ class std::list<Position, std::allocator<Position> >
由于您正在返回一个列表,您应该公开它:
class_<std::list<Position>>("list_position")
.def("__iter__", iterator<std::list<Position> >())
;
然后您可以迭代元素:
import map
path = map.Path()
path.findPathFromTo(2, 3, 34 ,34)
for p in path.resultPath: # is resultPath a std::list<Position>? I'm supposing YES.
print p.x, p.y, p.z
正如您在@janne karila指出的链接中所注意到的,可以改进python与std::list的交互方式,提供清除、追加、删除等列表元素的方法。如果您想使用索引访问元素,我建议您使用std::vector(这只是一个建议,不确定它是否适合您的需求)。
相关文章:
- 读取文件的最后一行并输入到链接列表时出错
- 从流到邻接列表的向量读取图形
- 从文本文件读取并保存到列表
- 从文本文件读取,然后将项目存储到列表中
- 在 DLL 中嵌入 Python:Py_DECREF列表对象时访问冲突读取位置
- 如何读取文件的内容,如果文件中的单词重复,请将它们添加到列表中?
- C 需要帮助的作业程序,该程序在文件列表中读取并在每个双重的双重列表中添加一个字符串
- 读取访问违规当前为0xCDCDCDCD,链接列表窗口
- 如何向 g++ 编译器解释如何读取用于从'list'文件中搜索 .h 文件的'include'目录列表
- 将数据从文件读取到链接列表中,并在链接列表中搜索元素
- 如何优雅地读取列表中第一个列表的大小<int><列表<int>>?
- 读取中的链接列表,然后按名称进行排序
- 读取文件夹中的文件列表时获取分段折叠
- C++ 从文本文件数据类型读取为结构,并将数据存储在列表的向量中
- 将不同长度的cstrings从输入文本文件读取到链接列表中
- C 链接列表 - 带有前哨的文件中读取数据
- 从文件读取数字列表到动态数组
- 私有变量的读取晚于成员init列表
- 正在将整数列表读取到数组C++中
- 如何为相邻列表读取格式化文件