当 T 为 'const std::map' 时,如何得到 const_iterator?

How to get const_iterator when the T is 'const std::map',?

我有以下结构:

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

预期类型:

但我的代码总是得到 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>;
};