我找到了答案。实际上,我正在搜索的内容与此答案非常相似(感谢moooeeeep的评论):
将C
++类实例暴露给python嵌入式解释器
遵循C ++类(注意!默认构造函数是必需的):
class TwoValues{public: TwoValues(void): iValue1(0), iValue2(0) {} TwoValues(int iValue1, int iValue2): iValue1(iValue1_), iValue2(iValue2_) {} int Addition(void) const {if (!this) return 0; return iValue1 + iValue2;}public: int iValue1; int iValue2;};
可以通过以下宏通过增强来暴露:
BOOST_PYTHON_MODULE(ModuleTestBoost){class_<TwoValues>("TwoValues") .def("Addition", &TWOVALUES::Addition) .add_property("Value1", &TWOVALUES::iValue1) .add_property("Value2", &TWOVALUES::iValue2);};
另一方面,我定义了一个python函数,
python_script.py该函数接受此类的实例并执行某些 *** 作。例如:
def wrapper_function(instance): result = instance.Addition() myfile = open(r"C:...testboostexample.txt", "w") output = 'First variable is {0}, second variable is {1} and finally the addition is {2}'.format(instance.Value1, instance.Value2, result) myfile .write(output) myfile .close()
然后在C ++端,我可以通过同时发送类的实例来调用此函数,如下所示:
Py_Initialize();try { TwoValues instance(5, 10); initModuleTestBoost(); object python_script = import("python_script"); object wrapper_function = python_script.attr("wrapper_function"); wrapper_function(&instance); }catch (error_already_set) { PyErr_Print(); }Py_Finalize();
优点:
- 我不需要建立任何共享库或二进制文件
- 当我使用Boost时,我不必担心内存管理和引用计数
- 我不使用共享的升压指针(boost :: shared_ptr)指向类的实例
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)