オーバーロードされたメンバ関数のアドレスを取得する方法?
-
22-08-2019 - |
質問
私はをオーバーロードされたのメンバ関数の特定のバージョンへのポインタを取得しようとしています。ここでは例があります:
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メンバ関数で持っていた、と私は答えとしてこれを掲示すべきである私に言っています。
所属していません StackOverflow