首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用pybind11将python函数转换为std::function

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

Stack Overflow用户
提问于 2017-11-08 17:49:40
回答 1查看 965关注 0票数 3

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

代码语言:javascript
复制
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++里

代码语言:javascript
复制
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);

我的python模块有以下内容:

代码语言:javascript
复制
def newFunc():
    print "working!"

def create_foo():

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

我不知道为什么函数没有正确地转换回c++?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-08 20:21:47

我不得不将py::scoped_interpreter python;移动到更高的作用域,因为在调用函数时它不在作用域中

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

https://stackoverflow.com/questions/47186425

复制
相关文章

相似问题

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