pybind11: как связать шаблонную функцию C ++ для выполнения неявных преобразований типов в функцию std :: vector <T>? - PullRequest
1 голос
/ 06 марта 2020

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

...