如何使用pybind11将python函数强制转换为std::function

2024-06-16 08:50:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个c++类型Foo,它包含一个std::function<void()> funcs,它已经成功地绑定到python。我的目标是用python定义函数并将它们添加到这个类型中,然后返回一个实例。在c++中,我使用pybind来获取这种类型的一个实例。但是,当我试图调用其中一个函数时,我的程序seg出现故障。在

class Foo
{
    void addFunc(std::function<void()> _func)
    {
      funcs.push_back(_func);
    }

    void call(int _index)
    {
      funcs[_index]();
    }

private:
    std::vector<std::function<void()>> funcs;
}

namespace py = pybind11;

PYBIND11_MODULE(foo, m) 
{
    py::class_<Foo>(m, "foo")
        .def(py::init<int, int>())
        .def("addFunc", &Foo::addFunc)
        .def("call", &Foo::call);
}

稍后在c++中

^{pr2}$

我的python模块有:

def newFunc():
    print "working!"

def create_foo():

  temp = foo.Foo(0, 100)
  temp.addFunc(newFunc)
  return temp

我不知道为什么函数不能正确地转换回c++中?在


Tags: 实例函数py类型foodeffunctioncall