我想把一个Python numpy数组传递给这个C++函数:
int data(std::span<int> x) { return x.size(); }
是否可以为pybind11编写支持此签名的custom type caster?pybind已经很好地支持vector<int>,但是我想添加对vector的零拷贝版本的支持,即通过引用传递。看起来有一些关于如何做这个here的线索。
vector<int>
qyswt5oh1#
这里有两个问题,所以我将分别回答:1.当然可以为std::span编写一个自定义类型转换器--我自己的基于pybind 11类型转换器的abseil span实现可以在这里找到。我还没有抽出时间向上游提交补丁,但是其他人也对此感兴趣(参见github discussion)。1.大多数pybind 11 STL类型转换器都会复制它们的序列,所以很可能未来的std::span转换器(比如我的)也会复制序列,但这并不意味着不可能--abseil span实现确实有一个专门化,如果span是基本类型,他们会将其转换为python缓冲区。
1条答案
按热度按时间qyswt5oh1#
这里有两个问题,所以我将分别回答:
1.当然可以为std::span编写一个自定义类型转换器--我自己的基于pybind 11类型转换器的abseil span实现可以在这里找到。我还没有抽出时间向上游提交补丁,但是其他人也对此感兴趣(参见github discussion)。
1.大多数pybind 11 STL类型转换器都会复制它们的序列,所以很可能未来的std::span转换器(比如我的)也会复制序列,但这并不意味着不可能--abseil span实现确实有一个专门化,如果span是基本类型,他们会将其转换为python缓冲区。