首页 > 解决方案 > Cython 获取 C++ 对象列表的 len

问题描述

我有一个 Cythonfoo.pyx文件和一个相应的 c++foo.h文件。在里面foo.h我有一个Foo对象列表,Foos定义如下:

std::list<Foo> Foos;

在我的foo.pyxCython 文件中,我有一个迭代器,它遍历列表,例如:

it = engine.Foos.begin()
while it != engine.Foos.end():
    # Do stuff

我面临的问题是我想事先知道有多大Foos。在常规的 python 中,我只是调用,len(foos)但是尝试len(engine.Foos)len(it)在这里只是导致 Cython 抛出一个关于无法转换为 Python 对象的错误。

有没有办法在迭代之前获取 c++ 对象列表的长度(注意;我不需要一个解决方案来计算 while 循环内的迭代次数)。

标签: pythonc++cython

解决方案


您可以简单地使用engine.Foos.size().

https://en.cppreference.com/w/cpp/container/list/size


推荐阅读