在 C++98 中,我通常使用以下语句在迭代器的值类型中声明一个变量:
typename std::iterator_traits<Iterator>::value_type value;
在 C++11 中,我们有 decltype,我认为推断值类型的最简单方法是:
decltype(*iterator) value;
不幸的是,对于大多数迭代器,*iterator 的类型是 value_type& 而不是 value_type。任何想法,没有类型修改类,如何将上述内容按摩成产生 value_type (而不是任何参考)?
我不认为这个问题是不合理的,因为以下内容相当稳健但最终创建了另一个变量。
auto x = *iterator;
decltype(x) value;
另请注意,我真的想要推导的类型而不仅仅是一个实例,例如,如果我想声明这些值的 std::vector。