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

Boost python, calling c++ functions from python when embedded

本文关键字:python 调用 函数 Boost      更新时间:2023-10-16

我目前有以下内容:

namespace py=boost::python;
//C++
void f() {
    std::cout << "hello worldn";
}
//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

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

修复很简单,但在此页面的文档中未提及:

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()