我已經用Py ++包裝了一個C++類,並且所有東西都在Python中工作得很好。我可以實例化C++類,調用方法等。如何從boost :: python中從Python類型中提取包裝的C++類型?
我正在嘗試將一些Python嵌入到C++應用程序中。這也適用於大多數情況。我可以調用一個Python模塊的功能,得到的返回值等
的Python代碼我打電話的回報,我包裹的一類:
import _myextension as myext
def run_script(arg):
my_cpp_class = myext.MyClass()
return my_cpp_class
我在C中調用這個函數++像這樣:
// ... excluding error checking, ref counting, etc. for brevity ...
PyObject *pModule, *pFunc, *pArgs, *pReturnValue;
Py_Initialize();
pModule = PyImport_Import(PyString_FromString("cpp_interface"));
pFunc = PyObject_GetAttrString(pModule, "run_script");
pArgs = PyTuple_New(1); PyTuple_SetItem(pArgs, 0, PyString_FromString("an arg"));
pReturnValue = PyObject_CallObject(pFunc, pArgs);
bp::extract< MyClass& > extractor(pReturnValue); // PROBLEM IS HERE
if (extractor.check()) { // This check is always false
MyClass& cls = extractor();
}
問題是提取從未真正抽取/轉換的PyObject *到MyClass的(即extractor.check()始終是假的)。
根據the docs這是提取包裝的C++類的正確方法。
我試過從Python函數返回基本數據類型(int/float/dicts),並且它們都被正確提取。
有什麼我失蹤了嗎?是否有另一種獲取數據並投射到MyClass的方法?