const
メンバー関数ポインターの性質をC++で定義されていますか?次の有効なコードはありますか?
struct T {
void foo(int i) const { std::cout << i << std::endl;};
};
void (T::*f1)(int) const = &T::foo;
void (T::*f2)(int) = reinterpret_cast<void (T::*)(int)>(f1);
T t;
(t.*f2)(1);
アップデート:
これが必要な理由は、オブジェクトとそのオブジェクトへのメンバー関数ポインターの両方を受け入れる関数を作成しているためです。constオブジェクト(const関数のみを受け入れる)のバージョンと通常のバージョンが必要です。重複したコードは必要ないので、実際のコードを非constバージョンに入れて、constバージョンから呼び出し、constを破棄するというアイデアでした。