首页 > 解决方案 > 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

标签: pythonc++castingstdvectorpybind11

解决方案


推荐阅读