Skip to content

Instantly share code, notes, and snippets.

@pvalienteverde
Created December 4, 2016 10:59
Show Gist options
  • Save pvalienteverde/5b5ca1e5052b49d67049ed2ede668b72 to your computer and use it in GitHub Desktop.
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
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