J'ai écrit mon propre modèle de conteneur avec un itérateur. Comment implémenter const_iterator?C++: Comment écrire un const_iterator?
template <class T>
class my_container {
private:
...
public:
my_container() : ... { }
~my_container() { }
class iterator : public std::iterator<std::bidirectional_iterator_tag, T> {
public: ...
Qu'en est-il des méthodes qui prennent les itérateurs comme arguments ou qui retournent les itérateurs? Je dois les surcharger pour const_iterators? On dirait un tas de code répété. –
Les itérateurs devraient être convertibles en const_iterators, donc vous ne devrez pas surcharger si vous avez seulement besoin d'un const_iterator. Vous faites pour des fonctions comme begin(), end(), mais il n'y a pas moyen de contourner cela, car const fait aussi partie de la signature de la méthode. –
@ Posoo Grubb: Non. Si vous avez des méthodes qui prennent des itérateurs, alors faites-en un modèle. La méthode devrait fonctionner pour tout ce qui agit comme un itérateur. Si la méthode nécessite un itérateur plutôt qu'un const_iterator, le compilateur générera l'erreur appropriée. –