18

オーバーロードされたメンバー関数の特定のバージョンへのポインターを取得しようとしています。次に例を示します。

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: 'initializing' : 'overloaded-function' から 'MemberFunctionType' に変換できません」です。

これfはオーバーロードされていない場合に機能しますが、上記の例では機能しません。なにか提案を?

編集

上記のコードは、「const」を忘れていたという現実の問題を反映していないことに注意してください-これは、受け入れられた回答が指摘していることです。ただし、問題は他の人にも発生する可能性があると思うので、質問はそのままにしておきます。

4

1 に答える 1

27

さて、私はすでにコメントとして入れたものに答えて、それが受け入れられるようにします。問題は一貫性にあります:

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 メンバー関数であり、これを回答として投稿する必要があると私に言いました。

于 2009-04-01T15:05:58.940 に答える