Ciao a tutti,
stavo cercando di capire come implementare il "range for loop" per un mio custom type. Per essere chiaro, assumiamo che io abbia scritto la solita classe
Vector, con le stesse operazioni base di std::vector, incluse ovviamente gli operator overloading di [], <<. Se volessi ora scorrere gli elementi di un
Vector<int> mio_vec{0,1,2,3,4,5,6,7,8,9};
con un range for loop, vorrei poter scrivere:
for (auto& x:mio_vec){
std::cout << x << std::end;
}
Chiaramente, non funziona. Ho però trovato sulla
documentazione che
If range_expression is an expression of a class type C that has both a member named begin and a member named end (regardless of the type or accessibility of such member), then begin_expr is __range.begin() and end_expr is __range.end();
così ho definito due member function come
T* begin(){return &(elem[0]);}
T* end(){return &(elem[_size]);}
dove
T
è il template.
ed ora funziona. Ho ritornato un puntatore perché ho notato che nei riquadri dove mostravano il codice veniva dereferenziato __begin. La mia domanda è: è proprio necessario ritornare l'indirizzo del primo e ultimo elemento, o magari ci sono altre possibilità? Al momento non ho trovato nulla.