C ++: как использовать decltype для получения типа из итератора - PullRequest
0 голосов
/ 11 декабря 2018

Во-первых, у меня есть 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:

error: указатель объявлен как указатель на ссылку типа int &

error: const_pointer объявлен указатель на ссылку типа int &

1 Ответ

0 голосов
/ 11 декабря 2018

Вместо этого используйте 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()};
...