質問

私はをオーバーロードされたのメンバ関数の特定のバージョンへのポインタを取得しようとしています。ここでは例があります:

class C
{
  bool f(int) { ... }
  bool f(double) { ... }

  bool example()
  {
    // I want to get the "double" version.
    typedef bool (C::*MemberFunctionType)(double);
    MemberFunctionType pointer = &C::f;   // <- Visual C++ complains
  }
};

のエラーメッセージは、「エラーC2440: 『初期化』: 『MemberFunctionType』 『のオーバーロード関数』から変換できません」である

fがオーバーロードされていない場合は、

このはなく、上記の例では、動作します。任意の提案?

EDIT

用心、上記のコードは、私が「ポーラ」忘れていたということでした私の実世界の問題を反映していない - これが受け入れられた答えは指摘するものです。それがあるように私は、問題は他の人に起こることができると思うので、私は、しかし、質問を残しておきます。

役に立ちましたか?

解決

さて、私はそれを受け入れることができるので、私はすでにコメントとして入れたものをお答えします。問題はconst性であります:

class C
{
  bool f(int) { ... }
  bool f(double) const { ... }

  bool example()
  {
    // I want to get the "double" version.
    typedef bool (C::*MemberFunctionType)(double) const; // const required!
    MemberFunctionType pointer = &C::f;
  }
};

の明確化:

元の質問には、そのconstが含まれていませんでした。私は、彼はおそらく実際のコードでconstメンバ関数であるfているかどうかをコメントで野生の推測をしました(:P理由はまだ早い繰り返しで、それはまた別のものは、現実世界のコードに異なる/行方不明になった判明しました)。彼は実際にはconstメンバ関数で持っていた、と私は答えとしてこれを掲示すべきである私に言っています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top