Синтаксис C ++ для вызова функции-члена с использованием ее указателя на функцию - PullRequest
1 голос
/ 27 февраля 2012

В приведенном ниже примере используется указатель на функцию-член класса Blah. Синтаксис указателя на функцию мне понятен. Однако при звонке мне пришлось ставить скобки вокруг this->*funcPtr, и я не уверен, почему это требуется. Я предполагаю, что это связано с тем, как C ++ оценивает выражение. Используемый компилятор VS 2008.

#include <iostream>

using namespace std;

struct Blah {

    void myMethod(int i, int k) {
        cout << "Hi from myMethod. Arguments: " << i << " " << k << endl;
    }

    typedef void (Blah::*blahFuncPtr)(int, int);

    void travelSomething(blahFuncPtr funcPtr) {
        (this->*funcPtr)(1, 2);
        // w/o the brackets I get C2064 in VS 2008
        // this->*funcPtr(1, 2);
    }
};

int main() {
    Blah blah;
    blah.travelSomething(&Blah::myMethod);
    cin.get();
    return 0;
}

1 Ответ

2 голосов
/ 27 февраля 2012

Оператор вызова функции () имеет более высокий приоритет, чем оператор «указатель на член» ->*.

См., Например, здесь .

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