我有以下结构体:
template<typename T>
struct Foo
{
typename T::iterator iter;
};
期望的类型:
当
T
推导为std::map<K, V>
时,iter
为std::map<K, V>::iterator
。当
T
推导为const std::map<K, V>
时,iter
为std::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>;
};