何が間違っているのかわかりません。基本クラス メンバへのポインタからのテンプレート推論の問題 - &DerivedClass::BaseClassMemeber。
完全な例:
#include <vcl.h>
#include <tchar.h>
struct Base
{
int BaseClassMember;
};
struct Derived : public Base
{
};
template<class T1, class T2>
void Test(T1& Param1, T2 T1::* Param2)
{
}
int _tmain()
{
Derived inst;
// Compile error E2285 Could not find a match for 'Test<T1,T2>(B,int A::*) - BCC32
// Error 1 error C2782: 'void Test(T1 &,T2 T1::* )' : template parameter 'T1' is ambiguous - MS VS8
Test(inst, &Derived::BaseClassMember);
// Works great
Test<Derived>(inst, &Derived::BaseClassMember);
return 0;
}
いくつかの回避策を見つけることができます。たとえば、もう 1 つのテンプレート パラメーター、static_cast、暗黙的な部分特殊化 (Test) による追加のテスト関数のオーバーロードです。
しかし、コンパイラが &DerivedClass::BaseClassMemeber で明示的に指定されたクラスを使用できない理由に興味があります。それが問題です。そして、問題に対するより洗練された解決策がある場合は、歓迎します。