通过嵌入式调用 C++ 代码 Python

Calling C++ code via embedded Python

我已经成功创建了一个 Python 模块,它似乎可以独立工作,但不会影响正在 运行 运行它的程序。

我有以下模块:

BOOST_PYTHON_MODULE(mandala)
{
    class_<state_mgr_t, state_mgr_t*, noncopyable>("states", no_init)
        .def("push", &state_mgr_t::push)
        .def("pop", &state_mgr_t::pop)
        .def("count", &state_mgr_t::count);

    scope().attr("states") = boost::python::object(boost::python::ptr(&states));
}

states 对象正在引用全局值,states:

extern state_mgr_t states;

我可以 运行 我的程序中的以下脚本行:

from mandala import states
states.count()
> 0

所有这些都很好,但我 期望 运行 宁这个 python 脚本会影响程序的实际状态运行正在使用它。看起来 Python 实际上只是在处理它自己的 states 实例而不影响父程序。

现在我想知道我是否完全误解了 Boost.Python 的能力;我期待类似于 Lua 的东西,我可以在其中通过脚本修改 C++ 程序。

这不可能吗?还是我做错了什么?

提前致谢!

如果您要将 Python 嵌入到您的 C++ 程序中,应该可以从您的脚本访问该实例。显然,我没有你的完整代码,但你试过这样的事情吗?

PyImport_AppendInittab("mandala", &initmandala);

Py_Initialize();

try {
    object main_module = import("__main__");
    object main_namespace = main_module.attr("__dict__");

    main_namespace.attr("states") = ptr(&states);

    object ignored = exec("print states.count()", main_namespace);

} catch(const error_already_set&) {
    PyErr_Print();
}