给出以下代码:
template <typename T, int N> struct foo_t {
struct iterator {};
};
template <typename T> int f(T) { return 1; }
template <typename T, int N> int f(typename foo_t<T, N>::iterator) { return 2; }
int main() {
foo_t<int, 10>::iterator a;
return f(a);
}
我不想在调用点添加显式模板参数列表。
如何更改
f
的签名,以便在 main 中的 f
函数调用中选择第二个重载?
C++ 版本 >= 11 的解决方案,但是 <20 would be ideal.
好友功能帮助
template <typename T, int N> struct foo_t {
struct iterator {
friend int f(iterator) { return 2; }
};
};
template <typename T> int f(T) { return 1; }
int main() {
foo_t<int, 10>::iterator a;
return f(a);
}