Cython 获取 C++ 对象列表的长度

Posted

技术标签:

【中文标题】Cython 获取 C++ 对象列表的长度【英文标题】:Cython getting len of C++ object list 【发布时间】:2019-11-02 15:23:48 【问题描述】:

我有一个 Cython foo.pyx 文件和一个相应的 c++ foo.h 文件。 在foo.h 内部,我有一个名为FoosFoo 对象列表,其定义如下:

std::list<Foo> Foos;

在我的foo.pyx Cython 文件中,我有一个迭代器,它可以遍历列表,如下所示:

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

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

有什么方法可以在迭代之前获取 c++ 对象列表的长度(注意;我不需要在 while 循环中计算迭代次数的解决方案)。

【问题讨论】:

如果你想知道“Foos 有多大”,那么只需使用 size() 函数:Foos.size() 【参考方案1】:

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

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

【讨论】:

以上是关于Cython 获取 C++ 对象列表的长度的主要内容,如果未能解决你的问题,请参考以下文章

Cython:扩展类型的链接列表

如何在 Python 中遍历 C++ 集?

在 cython 的循环中创建 c++ 映射

无法将 cpplist 导入 Cython?

用于将数组/向量发送到 C++ 脚本的 Cython 示例

在cython中使用参数声明函数时出错[关闭]