如何使用 pybind11 绑定函数模板?

问题描述

我想用 pybind11 绑定函数模板(函数模板本身不是类型、函数或任何其他实体。不会从仅包含模板定义的源文件生成代码。)。>

template<typename tree_iterator>
auto function(const tree_iterator first,const tree_iterator last) {

    tree_iterator ti,tj;
    auto ntrees = last - first;
 
    return ntrees;
 
}

我该如何解决这个问题?

当我执行 python setup.py bdist_wheel --force_debug 命令时出现此错误

-- Configuring done
-- Generating done
-- Build files have been written to: /home/user/workspace/dragon/multiband-fusion/build/temp.linux-x86_64-3.8
Scanning dependencies of target mbfusion
[ 50%] Building CXX object src/CMakeFiles/mbfusion.dir/main.cpp.o
/home/user/workspace/dragon/multiband-fusion/src/main.cpp: In function ‘void hg::tree_fusion_internal::pybind11_init_mbfusion(pybind11::module_&)’:
/home/user/workspace/dragon/multiband-fusion/src/main.cpp:64:63: error: no matching function for call to ‘pybind11::module_::def(const char [9],<unresolved overloaded function type>,const char [21])’
   64 |             m.def("function",function,"An example function.");
      |                                                               ^
In file included from /home/user/workspace/dragon/multiband-fusion/src/main.cpp:1:
/home/user/anaconda3/envs/dragon/lib/python3.8/site-packages/higra/lib/include/pybind11/pybind11.h:911:14: note: candidate: ‘template<class Func,class ... Extra> pybind11::module_& pybind11::module_::def(const char*,Func&&,const Extra& ...)’
  911 |     module_ &def(const char *name_,Func &&f,const Extra& ... extra) {
      |              ^~~
/home/user/anaconda3/envs/dragon/lib/python3.8/site-packages/higra/lib/include/pybind11/pybind11.h:911:14: note:   template argument deduction/substitution Failed:
/home/user/workspace/dragon/multiband-fusion/src/main.cpp:64:63: note:   Couldn’t deduce template parameter ‘Func’
   64 |             m.def("function","An example function.");
      |                                                               ^
make[2]: *** [src/CMakeFiles/mbfusion.dir/build.make:82: src/CMakeFiles/mbfusion.dir/main.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:134: src/CMakeFiles/mbfusion.dir/all] Error 2
make: *** [Makefile:114: all] Error 2
Traceback (most recent call last):
  File "setup.py",line 70,in <module>
    setup(
  File "/home/user/anaconda3/envs/dragon/lib/python3.8/site-packages/setuptools/__init__.py",line 153,in setup
    return distutils.core.setup(**attrs)
  File "/home/user/anaconda3/envs/dragon/lib/python3.8/distutils/core.py",line 148,in setup
    dist.run_commands()
  File "/home/user/anaconda3/envs/dragon/lib/python3.8/distutils/dist.py",line 966,in run_commands
    self.run_command(cmd)
  File "/home/user/anaconda3/envs/dragon/lib/python3.8/distutils/dist.py",line 985,in run_command
    cmd_obj.run()
  File "/home/user/anaconda3/envs/dragon/lib/python3.8/site-packages/wheel/bdist_wheel.py",line 299,in run
    self.run_command('build')
  File "/home/user/anaconda3/envs/dragon/lib/python3.8/distutils/cmd.py",line 313,in run_command
    self.distribution.run_command(command)
  File "/home/user/anaconda3/envs/dragon/lib/python3.8/distutils/dist.py",in run_command
    cmd_obj.run()
  File "/home/user/anaconda3/envs/dragon/lib/python3.8/distutils/command/build.py",line 135,in run
    self.run_command(cmd_name)
  File "/home/user/anaconda3/envs/dragon/lib/python3.8/distutils/cmd.py",in run_command
    cmd_obj.run()
  File "setup.py",line 41,in run
    self.build_extension(ext)
  File "setup.py",line 67,in build_extension
    subprocess.check_call(['cmake','--build','.'] + build_args,cwd=self.build_temp)
  File "/home/user/anaconda3/envs/dragon/lib/python3.8/subprocess.py",line 364,in check_call
    raise CalledProcessError(retcode,cmd)
subprocess.CalledProcessError: Command '['cmake','.','--config','Debug','--','-j2']' returned non-zero exit status 2.

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)