2012-03-14 155 views
0

我試圖從兩個成員函數之一檢索一個布爾值。我想打電話給一個成員函數(主),將指向基於傳遞給主值的兩個成員函數一個......這裏是我到目前爲止有:C++中的成員函數指針

class CRoutine{ 

    ... 
    BOOL (*MainRoutine(BOOL opcode))(); 
    static BOOL SubRoutine1(); 
    static BOOL SubRoutine2(); 
    ... 
    }; 

    BOOL (*CRoutine::MainRoutine(BOOL opcode))() 
    { 
     switch (opcode) 
     { 
     case false: 
      MessageBox(NULL, L"Routine1", L"Routine1", MB_OK); 
      return &CRoutine::SubRoutine1; 
     case true: 
      MessageBox(NULL, L"Routine2", L"Routine2", MB_OK); 
      return &CRoutine::SubRoutine2; 
     default: 
      MessageBox(NULL, L"Default Routine Selected", L"Routine1", MB_OK); 
      return &CRoutine::SubRoutine1; 
     } 
    } 

    BOOL CRoutine::SubRoutine1() 
    { 
     MessageBox(NULL, L"Routine1", L"Routine1", MB_OK); 
     return true; 
    } 
    BOOL CRoutine::SubRoutine2() 
    { 
     MessageBox(NULL, L"Routine2", L"Routine2", MB_OK); 
     return false; 
    } 

    winMain(...) 
    { 
    ... 
m_routine = new CRoutine(); 
    BOOL result = m_routine->MainRoutine(0); 
    ... 
    } 

我的問題是:

如何調用MainRoutine()以獲取來自SubRoutine1()或SubRoutine2()的布爾值。當我運行該程序的是我得到了以下錯誤:

錯誤C2440:「初始化」:無法從「BOOL(__cdecl *)(無效)」轉換爲「BOOL」

這主要是理論我我很感興趣,我知道還有其他方法可以得到這樣一個簡單的答案......提前感謝。

+2

將'bool'作爲'int'隱式使用,反之亦然並不是一個好主意。 – AJG85 2012-03-14 20:40:46

+0

C++有一個真正的'bool'ean類型;你爲什麼使用'BOOL'宏? – 2012-03-14 20:49:20

回答

2

像這樣:

BOOL result = m_routine->MainRoutine(0)(); 

這是因爲你從MainRoutine(0)返回函數指針,因此,你需要另外一對括號來調用它指向的函數。


順便說一下,您正在返回普通函數指針,而不是成員函數指針。

+0

你是什麼意思?在MainRoutine中? – 2012-03-14 20:40:45

+0

@ P.Avery是的。但可以肯定的是,普通函數指針用於存儲指向靜態成員函數的指針。 – Krizz 2012-03-14 20:42:41

+0

感謝您的幫助,我現在可以使用更少的條件語句運行程序 – 2012-03-14 20:45:36