我有一个Linux C ++动态库,需要将复合结构传递给python,并从python接收结果结构以传输到调用者应用程序。
要在库API函数返回到调用者应用程序后使python解释器“运行”,我决定使用单例类(使用getInstance ...)
对于C / Python API,我正在(尝试...)使用pybind11嵌入式模块机制
问题是如何连接单例类中的嵌入式模块,只是意味着如何从那里调用它(还带有传递的参数)?
看过"calling-embedded-function-in-class-method-using-pybind11",但没有回答我的问题
答案 0 :(得分:1)
似乎我找到了答案
尽管我正在研究Linux项目,但我发现此链接:Embedding Python in a C++ project with Visual Studio,其示例项目非常有教育意义,
并回顾PDF中的pybind11 embedded documentation,第13.4节,表明这样做很简单:
在C ++类中包含“ py :: module”成员,该成员将使用py :: module :: import(“ module_name”);
然后使用它调用C'tor等
例如:
// class member
py::module mModule;
和
//initialization
mModule = py::module::import("module_name");
mModule .attr("initialize").call(mArg1, mArg2);
由于这是库中的单例类,而不是main()的常规示例,所以对于解释器的生命周期,我发现最好使用:
py::initialize_interpreter();
{
//call py code...
}
然后致电
py::finalize_interpreter();
毁灭了这个实例
而不是常规py::scoped_interpreter guard{};
,它会在作用域结束时结束其寿命