Escribí mi propia plantilla de contenedor con un iterador. ¿Cómo implemento const_iterator?C++: ¿Cómo escribir 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é ocurre con los métodos que toman los iteradores como argumentos o como iteradores de retorno? Tengo que sobrecargarlos para const_iterators? Parece un montón de código repetido. –
iteradores deben ser convertibles en const_iterators, por lo que no tendrá que sobrecargar si solo necesita un const_iterator. Lo hace para funciones como begin(), end(), pero no hay forma de evitarlo, ya que const también es parte de la firma del método. –
@ Posco Grubb: No. Si tiene métodos que toman iteradores, entonces los plantilla. El método debería funcionar para cualquier cosa que actúe como un iterador. Si el método requiere un iterador en lugar de un const_iterator, el compilador generará el error apropiado. –