Created
December 4, 2016 10:59
-
-
Save pvalienteverde/5b5ca1e5052b49d67049ed2ede668b72 to your computer and use it in GitHub Desktop.
Ejemplo de como añadir iteradores personalizados a una clase. Es este ejemplo nuestra clase es hija de std::vector, aunque no es lo mas adecuado realizarlo por herencia para nuestro proposito es suficiente. Creamos un par de iteradores partiendo de los iteradores de std::vector con el predicado propuesto
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
template<typename T> | |
class WrapperVector: public std::vector<T> { | |
public: | |
typedef std::vector<T> Vector; | |
typedef std::function<bool(T)> Filtro; | |
typedef boost::filter_iterator<Filtro, typename Vector::iterator> IteradorFiltro; | |
WrapperVector(const Vector &valores, Filtro filtro) : | |
Vector(valores), filtro(filtro) { | |
} | |
// Iteradores personalizados | |
IteradorFiltro filtro_begin() { | |
return IteradorFiltro(filtro, Vector::begin(), Vector::end()); | |
} | |
IteradorFiltro filtro_end() { | |
return IteradorFiltro(filtro, Vector::end(), Vector::end()); | |
} | |
private: | |
Filtro filtro; | |
}; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment