当 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;
};
预期类型:
iter
是 std::map<K, V>::iterator
当 T
推导为 std::map<K, V>
.
iter
是 std::map<K, V>::const_iterator
当 T
推导为 const std::map<K, V>
但我的代码总是得到 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>;
};
我有以下结构:
template<typename T>
struct Foo
{
typename T::iterator iter;
};
预期类型:
iter
是std::map<K, V>::iterator
当T
推导为std::map<K, V>
.iter
是std::map<K, V>::const_iterator
当T
推导为const std::map<K, V>
但我的代码总是得到 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>;
};