учитывая итератор, объявите индекс с правильным size_type - PullRequest
1 голос
/ 24 апреля 2019

В шаблоне C ++ я изо всех сил пытаюсь определить переменную с правильным size_type.По сути, это будет тип индекса в контейнере.Я знаю, что int работает, но хотел бы иметь его в чистом виде.

template<typename ForwardIt> 
void test(ForwardIt it) {
    // this yields the underlying type
    decltype(typename std::iterator_traits<ForwardIt>::value_type()) T;

    // what I would like is something like above, but yielding the
    // correct size_type for the container.

    // Something like this but with the type extracted from ForwardIt:
    std::vector<int>::size_type i; 

    ...
}

1 Ответ

4 голосов
/ 24 апреля 2019

Разработка того, что сказал @NathanOliver: Итераторы не имеют size_type s; у них есть difference_type, который представляет расстояние между двумя итераторами. Контейнеры имеют size_type.

Итератору не нужно иметь связанный контейнер, поэтому нет способа получить "контейнер 100 * *" только от итератора.

...