Boost python,嵌入时从python调用c++函数

Posted

技术标签:

【中文标题】Boost python,嵌入时从python调用c++函数【英文标题】:Boost python, calling c++ functions from python when embedded 【发布时间】:2013-11-14 21:10:57 【问题描述】:

我目前有以下:

namespace py=boost::python;

//C++
void f() 
    std::cout << "hello world\n";


//I am not precious about this, if it can be done without a module that would be great
BOOST_PYTHON_MODULE(test)

    py::def("f", f);


int main() 
    auto main_module    =py::import("__main__");
    auto main_namespace =main_module.attr("__dict__");
    //???????
    auto result=py::exec_file("t.py", main_namespace);


//t.py
f()

我正在尝试调用 f,但我不确定使其工作所需的胶水。我可以做的课程

 int main() 
     //...

     py::obejct p_my_type=py::class_<my_type>("my_type").def("f", &my_type::f);
     main_namespace["my_type"]=p_my_type;

     //...

但是boost::python::def 似乎不会像class_ 那样返回boost::python::object

我的问题是,如何让第一个测试用例按预期工作? 其次是我在第二个代码 sn-p“正确”中公开我的类型的方式?

【问题讨论】:

【参考方案1】:

修复很简单,但在此页面的文档中没有提到:

http://www.boost.org/doc/libs/1_55_0/libs/python/doc/tutorial/doc/html/python/embedding.html

我需要这样做:

auto main_module    =py::import("__main__");
auto main_namespace =main_module.attr("__dict__");
inittest();
auto result=py::exec_file("t.py", main_namespace);


from test import f
f()

【讨论】:

以上是关于Boost python,嵌入时从python调用c++函数的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Boost.Python 在 Python 中调用内置函数

python嵌入C++,函数返回shared_ptr(pybind11/boost_python)

Boost python,使用命名空间调用函数对象

使用boost python嵌入python时导入错误

使用 Boost::Python 从嵌入式 python 中提取数据

如何为 python C++ 嵌入构建 boost 示例