2017-02-07 16 views
1

Я сделал динамический класс массива, каждый элемент массива определяются с помощью структуры сделано как этого
вперед итераторы, как вернуть константное значение

template <typename T> 
struct element{ 
    int i; 
    int j; 
    T val; 
}; 

Я определил вперед итератор и константный итератор для моего класса , итератору необходимо вернуться к возврату i, j, val, но только val может быть изменен, i и j изменить нельзя.
Как я могу это сделать?

ответ

4

Расширение @ ответ Вирсавий, ваши итераторы могут вернуть эту структуру:

template<typename T> 
struct element_ref { 
    const int& i; 
    const int& j; 
    T& val; 

    element_ref(element& e) : i(e.i), j(e.j), val(e.val) {} 
}; 

Его конструктор принимает действительные ссылки элемента и сохраняет его полей. только val ссылка может быть изменена.

+0

Да, это становится жарче. – Bathsheba

+0

большое спасибо! – user7337963

2

В некотором смысле это может быть болью в заднем, так как вы должны переписать конструктор и оператор присваивания, но вы могли написать

template <typename T> 
struct element{ 
    int i; 
    int j; 
    T val; 
    const int& _i; 
    const int& _j; 
}; 

и связываете _i и _j к i и j на строительство. Ваш прямой итератор возвращает эти ссылки, а не i и j напрямую.

Если кто-то может подумать о лучшем пути, то пожалуйста, снимите это.

+0

Но в итераторе у меня есть данные элемента как: element * ptr, я никогда не получаю доступ непосредственно к i и j. я бы опубликовал итератор, но это 70 строк, это нормально? – user7337963