我忙于在引擎中创建一个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