当 T 为 'const std::map' 时,如何获取 const_iterator?

dan*_*ipi 2 c++ templates type-alias

我有以下结构:

template<typename T>
struct Foo 
{
  typename T::iterator iter;
};
Run Code Online (Sandbox Code Playgroud)

预期类型:

  • iter是 astd::map<K, V>::iteratorT推导为std::map<K, V>

  • iter是一个std::map<K, V>::const_iterator何时T推导为const std::map<K, V>

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

如何达到预期的实施效果?

Con*_*nst 6

您可以提供一个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>;
};
Run Code Online (Sandbox Code Playgroud)