struct A // some class
{
void method(); // non-static member method
static void function(); // static member method
};
void function(); // global function
vector<A> vi; // any such `std` like container
我想要一个Iterate()
可以通过以下方式调用的函数(比如):
Iterate(vi, &A::method); // (1)
Iterate(vi, &A::function); // (2a)
Iterate(vi, &function); // (2b)
(2a) 和 (2b) 完全相同。
现在Iterate()
原型如下(1)和(2):
template<typename Container, typename Method>
void Iterate (Container &container, Method method); // for (1)
template<typename Container, typename Function>
void Iterate (Container &container, Function function); // for (2a), (2b)
自然两者完全相同,这会导致编译器错误。
有没有办法Iterate()
在 C++03 中重载/专门化,这将允许两个函数共存?