当 T 是"const std::map"时如何获得const_iterator?



我有以下结构体:

template<typename T>
struct Foo 
{
typename T::iterator iter;
};

期望的类型:

  • T推导为std::map<K, V>时,iterstd::map<K, V>::iterator

  • T推导为const std::map<K, V>时,iterstd::map<K, V>::const_iterator

但是我的代码总是得到一个std::map<K, V>::iterator

如何实现预期的实现?

您可以提供一个std::conditional类型:

#include <type_traits>  // std::conditional_t
template<typename T>
struct Foo {
using iter = std::conditional_t<std::is_const_v<T>
, typename T::const_iterator
, typename T::iterator>;
};

最新更新