Двойной цикл range based for по шаблонным классам [закрыт]

167
19 декабря 2018, 04:10

Есть шаблонный класс

template<typename It>
class PAGE {
private:
    It begin_, end_;
public:
    PAGE(It begin, It end) : beg_(begin), end_(end){
    }
    It begin() {
        return begin_;
    }
    It end() {
        return end_;
    }
};

Он содержит интервал определенных элементов. И есть класс, который создает классы PAGE, забрасывая их в массив:

template<typename Iterator>
class Paginator {
public:
    Paginator(Iterator begin, Iterator end, size_t page_size){
        // Лишний код удален для понятности, но тут он делит переданный интервал и превращает в PAGE
    }
    const Iterator begin() const {
        return pages.begin();
    }
    const Iterator end() const {
        return pages.end();
    }
private:
    vector< PAGE<Iterator> > pages;
};

И ожидается, что при попытке проитерироваться по страницам циклом

Paginator<vector<int>::iterator> paginate_v(v.begin(), v.end(), 6);
for (const auto& pageTest: paginate_v) {
    for (int& x : pageTest) {
    }
}

Второй цикл будет использовать ф-ции begin() и end() в классе PAGE, но переменная pageTest почему-то становится типом int, а не классом PAGE<vector<int>::iterator>. В чем проблема? Документацию по циклу уже читал, но это не особо помогло

Answer 1

Все, проблема решена, я ошибся с возвращаемым типом,нужен был

typename vector<PAGE<Iterator>>::iterator

READ ALSO
Помощь в написании шаблонной функции C++

Помощь в написании шаблонной функции C++

прошу опытных товарищей подсказать как лучше реализовать шаблонную функциюПредположим у меня есть такая структура:

158
Ошибка совместимости типов

Ошибка совместимости типов

Я хочу объявить тип long long double , но компилятор выдает ошибку, так как для него это все равно,что объявление int doubleМожно ли все-таки объявить...

149
emplace_back для шаблонного конструктора

emplace_back для шаблонного конструктора

Есть класс (не шаблонный и шаблонным его делать нельзя) с шаблонным конструктором:

169
создание двухбайтной строки

создание двухбайтной строки

Беру число из массива и перевожу в строку в связи с тем что работать надо с битами

173