如何选择正确的函数模板重载?

问题描述 投票:0回答:1

给出以下代码:

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.

c++ templates overload-resolution
1个回答
0
投票

好友功能帮助

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);
}

演示

© www.soinside.com 2019 - 2024. All rights reserved.