當前位置:成語大全網 - 漢語詞典 - 如何解決Python對象的局部C指針問題?

如何解決Python對象的局部C指針問題?

我正在考慮將python作為壹種嵌入式腳本語言用於我正在從事的壹個項目,並且已經完成了大部分工作。然而,我似乎無法將python擴展對象轉換回原生c++指針。

這是我的班級:

CGEGameModeBase類

{

公共:

虛擬void function call()= 0;

虛擬常量char * string return()= 0;

};

類CGEPYGameMode:public CGEGameModeBase,public boost::python::wrapper & lt;CGEPYGameMode & gt

{

公共:

虛擬void FunctionCall()

{

if(override f = this-& gt;get_override("FunctionCall "))

f();

}

虛擬常量char* StringReturn()

{

if(override f = this-& gt;get_override("StringReturn "))

返回f();

返回“呼叫失敗”;

}

};

增強包裝:

BOOST_PYTHON_MODULE(GEGameMode)

{

class _ & ltCGEGameModeBase,boost::non copy able & gt;(“CGEGameModeBase”,no _ init);

class _ & ltCGEPYGameMode,bases & ltCGEGameModeBase & gt& gt(“CGEPYGameMode”,no_init)

。def("FunctionCall ",& ampCGEPYGameMode::FunctionCall)

。def("StringReturn ",& ampCGEPYGameMode::string return);

}

python代碼:

導入GEGameMode

定義標識():

返回“阿爾法”

def NewGamePlay():

返回“NewAlpha”

def NewAlpha():

導入GEGameMode

導入工具

Alpha類(GEGameMode。CGEPYGameMode):

def __init__(self):

打印“制造新阿爾法!”

def函數調用(self):

吉蒂爾。Msg("這是功能測試Alpha!")

def StringReturn(self):

return“這是返回測試Alpha!”

返回Alpha()

現在我可以這樣調用第壹個函數:

const char* ident = extract<。const char * & gt(GetLocalDict()[" Ident "]());

const char * new gameplay = extract & lt;const char * & gt(GetLocalDict()[" new gameplay "]());

printf("加載腳本:%s\n ",ident);

CGEPYGameMode * m _ pGameMode = extract & lt;CGEPYGameMode * & gt(GetLocalDict()[new gameplay]());

然而,當我試圖將Alpha類轉換回它的基類(上面的最後壹行)時,我得到了壹個boost錯誤:

TypeError:沒有註冊的轉換器能夠從Alpha類型的Python對象中提取指向CGEPYGameMode類型類的C++指針

我在網上做了很多搜索,但是不知道如何將Alpha對象轉換成它的基類指針。我可以把它作為壹個對象,但更願意把它作為壹個指針,這樣壹些不支持python的代碼就可以使用它。有什麽想法嗎?

感謝python c++郵件列表中的Stefan,我錯過了

超級(阿爾法,自我)。__init__()

這意味著它從未創建父類。以為這是自動:D

我遇到的另壹個問題是將新的類實例保存為全局變量,否則它會因為超出範圍而被清除。

現在好開心