2012-03-14 18 views
0

2つのメンバ関数のいずれかからブール値を取得しようとしています。メンバ関数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); 
    ... 
    } 

私の質問です:私はメインに渡された値に基づいて、2つのメンバ関数の一つを指しますその(メイン)メンバ関数を呼び出すしたいと思います...ここで私はこれまで持っているものである

SubRoutine1()またはSubRoutine2()からブール値を取得するには、MainRoutine()をどのように呼び出す必要がありますか。

エラーC2440:「初期化すると、」:「BOOL」から「BOOL(__cdecl *)(無効)」から変換できません

は、これは主に理論である私は、私は次のエラーを取得するあるように私はプログラムを実行すると、私が興味を持っているのは、そのような簡単な答えを得るための他の方法があることを知っています...事前に感謝します。このよう

+2

'bool'を' int'として暗黙的に使用すると、おそらくそれは良い考えではありません。 – AJG85

+0

C++には本当の 'bool'ean型があります。なぜあなたは 'BOOL'マクロを使用していますか? –

答えて

2

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

あなたは、このようにあなたはそれが指し示す機能を呼び出すために、括弧の別のペアを必要とする、MainRoutine(0)から関数ポインタを返すので、それがあります。


ところで、メンバー関数ポインタではなく、プレーン関数ポインタを返しています。

+0

どういう意味ですか? MainRoutineで? –

+0

@ P.Averyはい。しかし、それは正常です、プレーン関数ポインタは、静的メンバー関数へのポインタを格納するために使用されます。 – Krizz

+0

助けてくれてありがとう、私はより少ない条件文でプログラムを走らせることができます –

関連する問題