c++ - 从 value_type 获取 key_type

标签 c++ templates std

我有一个在标准容器上运行的 X 类。以 value_type 作为参数的函数必须调用以 key_type 作为参数的函数。我怎么做?我看起来很基础。

template<typename C>
class X
{
  void foo(typename C::value_type vt)
  {
    bar(vt.first); // this works for C = std::map
    bar(vt); // this works for C = std::set
  }
  void bar(typename C::key_type kt)
  {
     ...
  }
};

最佳答案

添加一个 (private) bar 重载,它是一个函数模板并以 T::value_type 作为参数。

template<typename C>
class X
{
public:
  void foo(typename C::value_type vt)
  {
    bar(vt);
  }

  void bar(typename C::key_type kt)
  {}

private:
  template<typename T = C>
  void bar(typename T::value_type kt)
  {
     bar(kt.first);
  }
};

C 是一个 std::map 时,对 foo 中的 bar 的调用将解析为成员函数模板,然后它将使用正确的参数调用其他 bar

C 是一个 std::set 时,对 bar 的调用将同时匹配 bar 重载, 但由于一个是成员函数模板,而另一个不是,因此后者将被认为是更好的匹配。

Live demo

关于c++ - 从 value_type 获取 key_type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24905553/

相关文章:

c++ - 推导参数失败,适用于返回值

模板类中的 C++ 赋值运算符实现

c++ - 将 "extractor"传递给也采用可迭代对象的 C++ 方法

c++ - 为什么调用 std::vector::back() 会使我的程序崩溃

c++ - 访问 map 元素

c++ - MSVC++ 中可能的编译器错误

c++ - 该值应该在 while 循环结束时还是开始时更新?

c++ - 阻止连接到 boost 信号的所有连接

c++ - 方法范围外取消引用的 char[] 指针的有效性

c++ - 为什么编译器不能推断出自动模板参数,除非我添加 const?