我无法弄清楚我做错了什么。从指针到基类成员的模板推导中的问题 - &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;
}
我可以找到几种解决方法,例如附加测试函数重载与一个模板参数、static_cast、隐式偏特化(测试)。
但我对编译器无法使用 &DerivedClass::BaseClassMemeber 中明确指定的类的原因感兴趣。就是那个问题。如果您有更优雅的问题解决方案,欢迎。