我提到了这个有点相似的问题。但是这里的情况不同:
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
inside A
。如果只有 1foo
则代码可以正常工作。但是对于重载的情况,编译器会抱怨:
错误:没有匹配的函数调用 `ReceiveFuncPtr(A&, [未解决的重载函数类型])'
除了在调用时进行显式类型转换ReceiveFuncPtr()
,我们有什么方法可以对其template
参数进行一些更改并使其foo(int)
始终能够接收任何类似的版本class A
?
编辑:想法是在调用函数时不要担心类型。它应该很简单,ReceiveFuncPtr(obj, &A::foo);
让其template
发挥作用。