0
是否可以使用函數指針指向非靜態成員函數?我想指出一個成員函數,它使用類中的非靜態對象和變量...靜態成員函數不能這樣做...函數指向非靜態成員函數的指針?
我有一個成員函數指向四個靜態成員函數之一。問題是四個成員函數中的每一個要使用的數據都是非靜態的,所以靜態成員函數將不會訪問它們...
我可以指向非靜態成員函數嗎?
此外,類的實例是一個指針...這裏是我的代碼:
class CRoutine{
int m_index;
...
BOOL (*CallRoutine(char opcode))(DWORD, float, float, float);
static BOOL Update(DWORD, float, float, float);
static BOOL Transition(DWORD, float, float, float);
static BOOL Revert(DWORD, float, float, float);
static BOOL Sequence(DWORD, float, float, float);
...
};
BOOL (*CRoutine::CallRoutine(char opcode))(DWORD, float, float, float)
{
switch (opcode)
{
case 0:
return &CRoutine::Update;
case 1:
return &CRoutine::Transition;
case 2:
return &CRoutine::Revert;
case 3:
return &CRoutine::Sequence;
default:
return &CRoutine::Update;
}
}
BOOL CRoutine::Update(DWORD AnimSetIndex, float time, float tTime, float shift)
{
MessageBox(NULL, L"Updating", L"Routine #1", MB_OK);
CRoutine::m_index++; // Error thrown here...
return true;
}
BOOL CRoutine::Transition(DWORD AnimSetIndex, float time, float tTime, float shift)
{
MessageBox(NULL, L"Transitioning", L"Routine #2", MB_OK);
return true;
}
BOOL CRoutine::Revert(DWORD AnimSetIndex, float time, float tTime, float shift)
{
MessageBox(NULL, L"Reverting", L"Routine #3", MB_OK);
return true;
}
BOOL CRoutine::Sequence(DWORD AnimSetIndex, float time, float tTime, float shift)
{
MessageBox(NULL, L"Sequencing", L"Routine #4", MB_OK);
return true;
}
上面拋出的錯誤是: 錯誤C2597:非法引用非靜態成員「CRoutine :: M_索引」
「*是否有可能被用來使用一個函數指針指向一個非靜態成員函數?*「不,但可以使用_member函數指針_指向一個非靜態成員函數... – ildjarn 2012-03-14 23:15:28
我看到了區別謝謝...發現了一篇關於成員函數的文章指針... http://www.codeproject.com/Articles/7150/Member-Function-Pointers-and-the-Fastest-Possible – 2012-03-14 23:27:08
見http://www.parashift.com/c++-faq-lite/pointers -to-members.html – 2012-03-14 23:27:46