Указатели на функции-члены в C ++ - PullRequest
0 голосов
/ 15 марта 2012

Я пытаюсь получить логическое значение из одной из двух функций-членов.Я хотел бы вызвать функцию-член (main), которая будет указывать на одну из двух функций-членов на основе значения, переданного в main ... вот что у меня есть:

    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 *) (void)» в «BOOL»

ThisЯ в основном интересуюсь теорией, я знаю, что есть и другие способы получить такой простой ответ ... заранее спасибо.

1 Ответ

2 голосов
/ 15 марта 2012

Вот так:

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

Это потому, что вы возвращаете указатель на функцию из MainRoutine(0), поэтому вам нужна другая пара скобок для вызова функции, на которую она указывает.


Кстати, вы возвращаете простой указатель на функцию, а не указатель на функцию-член.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...