python - pybind11:如何绑定 C++ 模板函数以执行到 std::vector 的隐式类型转换功能?
问题描述
我有以下 C++ 模板函数:
template<typename T>
std::vector<T> add_two_columns(std::vector<T> vec1, std::vector<T> vec2) {
vec2.resize(vec1.size());
std::transform(vec1.begin(), vec1.end(), vec2.begin(), vec1.begin(), std::plus<T>());
return vec1;
}
我正在定义 pybind11 绑定,如下所示:
m.def("add_two_columns", add_two_columns, "Add two Integer columns/vectors");
这给出了以下错误:
src/main.cpp: In function ‘void pybind11_init_py_pkg(pybind11::module&)’:
src/main.cpp:173:80: error: no matching function for call to ‘pybind11::module::def(const char [16], <unresolved overloaded function type>, const char [32])’
m.def("add_two_columns", add_two_columns, "Add two Integer columns/vectors");
In file included from src/main.cpp:1:0:
/home/username/miniconda3/envs/speedup/include/python3.6m/pybind11/pybind11.h:818:13: note: candidate: template<class Func, class ... Extra> pybind11::module& pybind11::module::def(const char*, Func&&, const Extra& ...)
module &def(const char *name_, Func &&f, const Extra& ... extra) {
^~~
/home/username/miniconda3/envs/speedup/include/python3.6m/pybind11/pybind11.h:818:13: note: template argument deduction/substitution failed:
src/main.cpp:173:80: note: couldn't deduce template parameter ‘Func’
m.def("add_two_columns", add_two_columns, "Add two Integer columns/vectors");
^
error: command 'gcc' failed with exit status 1
我检查了这个文档,但不明白如何调用或绑定模板函数:
https://pybind11.readthedocs.io/en/stable/advanced/cast/stl.html
解决方案
推荐阅读
- python - 使用 sklearn 管道时出现 ValueError:数组不得包含 infs 或 NaN
- r - 如何按降序排列这个 ggplot2 图?
- java - 为什么我可以做清单
.toArray() 但不列出 .toArray() - python - 通过使用 python 从 yaml 文件中读取数据来创建 sql 文件
- pytorch - 使用 pytorch 张量进行维度扩展
- python - 通过记忆实现最小的硬币数量以进行更改?
- drake - 如何获得动态,我们可以在下一步中应用渐变(重新打开)
- spring - junit 测试无法捕获异常
- database - 使用飞镖将sqlite数据库加载到内存中?
- keycloak - 通过跳过登录页面进行 Keycloak 登录