このやや似た質問を参照しました。ただし、ここではシナリオが異なります。
struct A
{
void foo (int i) {} // choice
void foo (double i) {}
};
template<typename ObjType, typename FuncPtr>
void ReceiveFuncPtr (ObjType o, FuncPtr pf)
{
(o.*pf)(1);
}
int main ()
{
A obj;
ReceiveFuncPtr(obj, &A::foo); // don't want typecast here
}
上記のテスト コードでは、foo
内部に がオーバーロードされていA
ます。1 つしかなかっfoo
た場合、コードは正常に動作します。ただし、オーバーロードの場合、コンパイラは次のように文句を言います。
エラー: 「ReceiveFuncPtr(A&, [未解決のオーバーロードされた関数型])」の呼び出しに一致する関数がありません
を呼び出すときに明示的に型キャストする代わりに、そのパラメーターにいくつかの変更を加えて、同様のバージョンを常に受けReceiveFuncPtr()
取ることができるようにする方法はありますか?template
foo(int)
class A
編集:関数の呼び出し中に型を気にする必要はありません。ReceiveFuncPtr(obj, &A::foo);
それは次のように単純でなければなりtemplate
ません。