我有一个Linux C ++动态库,需要将复合结构传递给python,并从python接收结果结构以传输到调用者应用程序。
为了在库API函数返回调用者应用程序之后让python解释器“活着”,我决定使用singleton类(使用getInstance ...)
对于C / Python API,我(尝试...)使用pybind11嵌入式模块机制
问题是如何在单例类中连接嵌入式模块,只是意味着如何从那里调用它(也使用传递的参数)?
看着"calling-embedded-function-in-class-method-using-pybind11",但它没有回答我的问题
似乎我找到了答案
虽然我正在研究一个Linux项目,但我发现这个链接:Embedding Python in a C++ project with Visual Studio及其示例项目,非常有教育意义,
回顾pybind11 embedded documentation,PDF格式的第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{};
,它在范围的最后完成了它的生命周期