У меня есть следующая шаблонная функция 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