【发布时间】:2020-12-21 02:08:22
【问题描述】:
我正在尝试为构建在地图之上的类编写迭代器适配器。尝试从迭代器类型获取映射类型时遇到问题。基本上我想得到:
- map
::iterator --> Val - map
::const_iterator --> Val const
这是一个最小的复制。
#include <map>
#include <type_traits>
template <typename BaseIteratorT>
using ValueType = typename BaseIteratorT::value_type::second_type;
// Passes
static_assert(
std::is_same<ValueType<std::map<double, int>::iterator>, int>::value,
"bad type for mutable iterator");
// Fails
static_assert(
std::is_same<ValueType<std::map<double, int>::const_iterator>, const int>::value,
"bad type for const iterator");
我怎样才能做到这一点 (C++14)?
【问题讨论】:
-
这段代码中
pair<A,B>::second_type始终为B的问题,成员typedefs 不会根据constness 变形 -
为什么要
const val?这没有道理。如果您想将val&引用到const val&,那么它会有意义但没有价值。 -
value_type是类型而不是引用类型。因此,常数无关紧要。 stackoverflow.com/a/12821204
标签: c++