我忙於在引擎中創建一個leveleditor類,但我堅持將成員函數作爲另一個成員函數的參數傳遞。傳遞成員函數作爲成員函數的參數
首先,我做了一個typedef
typedef void (LevelEditor::*CallFunctionPtr)();
然後我做了一個成員函數來檢查用戶是否與他的一個hitregion鼠標點擊。如果是這樣,需要調用另一個函數。所以我我的第一個成員函數有兩個參數
LevelEditor.h
void CheckClickCollision(HitRegion* region, CallFunctionPtr callFunctionPtr);
LevelEditor.cpp
void LevelEditor::CheckClickCollision(HitRegion* region, CallFunctionPtr callFunctionPtr)
{
if(GAME_ENGINE->GetLButtonMouseState())
{
if(!m_bIsLeftPressed && region->HitTest(m_MousePosition))
(this->*callFunction)();
m_bIsLeftPressed = true;
}
else
m_bIsLeftPressed = false;
}
然後我有2個愚蠢的例子成員函數:
關卡編輯器.H
void LevelUp();
void LevelDown();
LevelEditor.cpp
void LevelEditor::LevelUp()
{
++m_iCurrentLevel;
}
void LevelEditor::LevelDown()
{
if(m_iCurrentLevel > 0)
--m_iCurrentLevel;
else
return;
}
現在我想調用該函數每一個刻度,以檢查是否存在命中。所以在我的蜱功能:
CheckClickCollision(m_LeftArrowRegionPtr, LevelDown);
CheckClickCollision(m_RightArrowRegionPtr, LevelUp);
在這裏,我得到LevelDown和升級火錯誤:
錯誤:類型爲void(關卡編輯器:: *)()的說法「是與類型的參數不兼容」 CallFunctionPtr *」
不知道如何解決它。嘗試不同的東西,沒有什麼工作
有沒有考慮過'std :: mem_fn'? – chris
不知道這一點,但我會搜索它。 Thnx;) – Thore