首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >pybind11 basic回调,函数签名不兼容错误

pybind11 basic回调,函数签名不兼容错误
EN

Stack Overflow用户
提问于 2017-11-24 22:06:20
回答 0查看 1.2K关注 0票数 1

我无论如何也不能让一个非常基本的Python回调函数在用pybind11构建的扩展模块中工作。我正在尝试遵循示例here,但我猜我一定是误解了什么。

C++代码如下:

代码语言:javascript
运行
复制
#include <iostream>
#include <functional>
#include <pybind11/pybind11.h>

namespace py = pybind11;

void run_test(const std::function<int(int)>& f)
{
   // Call python function?
   int r = f(5);
   std::cout << "result: " << r << std::endl;
}

PYBIND11_PLUGIN(mymodule)
{
    py::module m("mymodule");
    m.def("run_test", &run_test);
    return m.ptr();
} 

使用这个模块的Python代码是

代码语言:javascript
运行
复制
import mymodule as mm

# Test function
def test(x):
  return 2*x

mm.run_test(test)

然而,我得到了这个错误:

代码语言:javascript
运行
复制
Traceback (most recent call last):
  File "test.py", line 7, in <module>
    mm.run_test(test)
TypeError: run_test(): incompatible function arguments. The following argument types are supported:
    1. (arg0: std::function<int (int)>) -> None

Invoked with: <function test at 0x2b506b282c80>

为什么它认为函数签名不匹配?我试着匹配这些例子,但我想我一定误解了什么……

EN

回答

页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47474961

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档