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

如何使用pybind11将python函数强制转换为std::function,python,c++,c++11,pybind11,Python,C++,C++11,Pybind11,我有C++类型 fo,包含了 STD::FROUTS/,它已成功绑定到Python。我的目标是在python中定义函数并将它们添加到此类型,然后返回一个实例。在C++中,我使用PyBin来获取这种类型的实例。但是,当我试图调用其中一个函数时,我的程序seg出现故障 class Foo { void addFunc(std::function<void()> _func) { funcs.push_back(_func); } void c

我有C++类型<代码> fo,包含了<代码> STD::FROUTS/<代码>,它已成功绑定到Python。我的目标是在python中定义函数并将它们添加到此类型,然后返回一个实例。在C++中,我使用PyBin来获取这种类型的实例。但是,当我试图调用其中一个函数时,我的程序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++?

我必须移动<代码> py::SCONDEXY解释器Python;<代码>到更高的范围,因为调用函数时它不在范围内

我必须移动
py::scoped\u解释器python到更高的作用域,因为调用函数时它不在作用域中

py::scoped_interpreter python;
auto module = py::module::import("foo_module");
auto func = module.attr("create_foo");
auto result = func();
//This works!
result.attr("call")(0);
Foo* blah = result.cast<Foo*>();
//This seg-faults!
blah->call(0);
def newFunc():
    print "working!"

def create_foo():

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