同様の問題を抱えている人の質問をたくさん読んだことがありますが、ほとんどの場合、メソッド ポインターの代わりに関数ポインターを使用している人、またはポインター インスタンスの作成時にクラス スコープを省略している人に要約されます。ただし、私はそれらのどちらも行っていません (私は思う...):
class Test
{
public:
Test() { mFuncPtrs.insert( 10, &Test::Func<int> ); } // Error!
template <class T>
void Func() {}
private:
typedef void ( Test::*FuncPtr )();
std::map<int, FuncPtr> mFuncPtrs;
};
しかし、これは次のようになります。
error: no matching function for call to ‘std::map<int, void (Test::*)(), std::less<int>, std::allocator<std::pair<const int, void (Test::*)()> > >::insert(int, <unresolved overloaded function type>)’
しかし、私はメソッドの全範囲を提供し、Func()
オーバーロードを持たないテンプレート型で明示的です! 違いがある場合は、g++ v4.1.2 を使用しています。