C ++:如何使用decltype从迭代器获取类型

时间:2018-12-11 03:15:36

标签: c++ c++11 decltype

首先,我有一个forward_list

forward_list<int> f {1, 0, 5, 4};
auto i = *(f.begin());
auto beg = f.begin();

然后,我尝试从vector构建一个f,我想使用decltype从迭代器获取类型。

vector<decltype(*beg)> v{f.begin(), f.end()}; // compile error

但是

vector<decltype(i)> v{f.begin(), f.end()};

效果很好。

错误信息主要与memory有关:

  

错误:“指针”被声明为指向“ int&”类型的引用的指针

     

错误:“ const_pointer”被声明为指向“ int&”类型引用的指针

1 个答案:

答案 0 :(得分:1)

改为使用std::iterator_traits

using type = std::iterator_traits<decltype(beg)>::value_type;
std::vector<type> v{f.begin(), f.end()};

或衰减已取消引用的迭代器类型

using type = std::decay_t<decltype(*beg)>;
std::vector<type> v{f.begin(), f.end()};