C++和pybind11:type_caster是否支持std::span?

cunj1qz1  于 2022-12-27  发布在  其他
关注(0)|答案(1)|浏览(130)

我想把一个Python numpy数组传递给这个C++函数:

int data(std::span<int> x) { return x.size(); }

是否可以为pybind11编写支持此签名的custom type caster
pybind已经很好地支持vector<int>,但是我想添加对vector的零拷贝版本的支持,即通过引用传递。
看起来有一些关于如何做这个here的线索。

qyswt5oh

qyswt5oh1#

这里有两个问题,所以我将分别回答:
1.当然可以为std::span编写一个自定义类型转换器--我自己的基于pybind 11类型转换器的abseil span实现可以在这里找到。我还没有抽出时间向上游提交补丁,但是其他人也对此感兴趣(参见github discussion)。
1.大多数pybind 11 STL类型转换器都会复制它们的序列,所以很可能未来的std::span转换器(比如我的)也会复制序列,但这并不意味着不可能--abseil span实现确实有一个专门化,如果span是基本类型,他们会将其转换为python缓冲区。

相关问题