ロベールの本を読んでいます。
メンバ関数ポインタについて質問です。

int (*Calculator::mfp)();
int (Calculator::*mfp)();

のどちらが正しいかという話が書いてあります。


あとは「どこに」つけ足すかですが、これは簡単に考えると2種類考えられます。

int (*Calculator::mfp)();
int (Calculator::*mfp)();

しかし、静的メンバ変数として普通の関数ポインタを作った場合を考えると、前者
では問題があることが分かります。

typedef を使わず静的メンバ変数として普通の関数ポインタを作ると次のようになります。

class Calculator {
public:
static int (*mfp)();
};

int (*Calculator::mfp)();

静的メンバ変数の実態を定義する時には変数名の前に Calculator:: をつける必要があります。
しかし、もし前者の宣言法が正しいのであれば、この静的メンバ変数の実体定義と区別
がつきません。これでは困りますね。

ということで、後者の宣言法が正しいと推測されます。