【发布时间】:2011-06-17 04:59:19
【问题描述】:
我提到了这个somewhat similar question。但是这里的情况不同:
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
}
在上面的测试代码中,我在A 中有一个重载的foo。如果只有 1 个foo,那么代码可以正常工作。但是对于重载的情况,编译器会抱怨:
错误:没有匹配的调用函数 到`ReceiveFuncPtr(A&,[未解决 重载函数类型])'
除了在调用ReceiveFuncPtr() 时进行显式类型转换,我们有什么方法可以对其template 参数进行一些更改,并使其始终能够接收foo(int) 版本,以获取任何类似的class A?
编辑:想法是在调用函数时不要担心类型。它应该像ReceiveFuncPtr(obj, &A::foo); 一样简单,然后让template 完成它的工作。
【问题讨论】:
-
定义“对于任何类似的 A 类”的含义,这样可以更好地帮助您。
标签: c++ templates overloading member-function-pointers