pybind11 基本回调,不兼容的函数签名错误

本·农夫

我一生都无法获得一个非常基本的 Python 回调函数来在使用 pybind11 构建的扩展模块中工作。我试图按照这里的例子,但我想我一定是误解了一些东西。

C++代码如下:

#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 代码是

import mymodule as mm

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

mm.run_test(test)

但是我收到这个错误:

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>

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

本·农夫

啊好吧,我误解了为什么在那个例子中使用 std::function 。这是一个更复杂的双重回调,其中一个 C++ 函数被传递给 Python,然后返回到 C++,以检查它是否在旅程中幸存下来。对于刚刚调用Python函数一个需要使用py::object并把结果到C ++型(如所描述的在这里):

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Pybind11类型错误

来自分类Dev

pybind11:卡在无法解析的重载函数类型中

来自分类Dev

pybind11 中受保护的虚拟析构函数

来自分类Dev

使用 PYBIND11_MODULE 时使用 Pybind11 将 C++ 函数集成到 Python 时出错

来自分类Dev

在C回调中如何使用Pybind11访问Python对象?

来自分类Dev

从pybind11构建导入模块时出现错误“分段错误(核心已转储)”

来自分类Dev

如何使用pybind11将Python函数作为C ++线程内的回调进行调用

来自分类Dev

如何使用pybind11在C ++中调用python内置函数

来自分类Dev

OpenMP / Pybind11:在for循环中访问python对象会返回内嵌字符串错误

来自分类Dev

在 C++ 中使用 pybind11 包装器时出现段错误

来自分类Dev

Python 和 C++ (Pybind11):Python 扩展模块导入错误

来自分类Dev

我可以使用pybind11将numpy数组传递给接受Eigen :: Tensor的函数吗?

来自分类Dev

Pybind11类定义

来自分类Dev

pybind11使对象保持活动状态

来自分类Dev

Pybind11多处理挂起

来自分类Dev

Pybind11多处理挂起

来自分类Dev

pybind11运行测试用例

来自分类Dev

Pybind11:带有lambda的init <>

来自分类Dev

在pybind11中输入npz文件

来自分类Dev

pybind11 与 numpy 的矩阵乘积

来自分类Dev

返回多个py :: array而不在pybind11中复制

来自分类Dev

如何使用pybind11提供默认的枚举值?

来自分类Dev

Pybind11默认参数numpy数组或无

来自分类Dev

在Pybind11中使用自动转换

来自分类Dev

本征返回类型的Pybind11问题

来自分类Dev

使用Pybind11将Eigen :: Tensor暴露给Python

来自分类Dev

有人可以解释pybind11安装吗?

来自分类Dev

如何在C中公开pybind11 :: object?

来自分类Dev

Pybind11:将元组列表从Python传递到C ++

Related 相关文章

热门标签

归档