Hay tal código:Wrap vector de STL y el cambio de comportamiento de su iterador
#include <iostream>
#include <vector>
template <class T>
class A{
public:
class iterator : public std::vector<T>::iterator{
public:
T& operator*(){
??
}
};
iterator begin(){
return v.begin(); // error
}
iterator end(){
return v.end(); // error
}
void add(const T& elem){
v.push_back(elem);
}
private:
std::vector<T> v;
};
int main() {
A<int> a;
a.add(2);
a.add(4);
for(A<int>::iterator it = a.begin(); it != a.end(); ++it){
std::cout << *it << std::endl;
}
return 0;
}
Este es un contenedor de std::vector
con mis propias funciones adicionales. Me gustaría utilizar iterador std::vector
's, sin embargo quiero sólo para cambiar el comportamiento de operator*
de iterador:
T& operator*(){
// do some additional function
// normal behavior, return value of some element in vector
??
}
¿Cómo puedo usar std::vector
y su iterador con la modificación de sólo el operator*
? También me gustaría envolver funciones como iterador, begin()
y end()
, ¿cómo ajustarlas correctamente?
EDIT:
Utilizando puntas de las respuestas en este tema, he conseguido resolver mi problema en la siguiente forma:
#include <iostream>
#include <vector>
template <class T>
class A {
public:
class iterator : public std::vector<T>::iterator {
public:
iterator(typename std::vector<T>::iterator c) : std::vector<T>::iterator(c) {
}
T& operator*() {
std::cout << "Im overloaded operator*\n";
return std::vector<T>::iterator::operator *();
}
};
iterator begin() {
return iterator(v.begin());
}
iterator end() {
return iterator(v.end());
}
void add(const T& elem) {
v.push_back(elem);
}
private:
std::vector<T> v;
};
int main() {
A<int> a;
a.add(2);
a.add(4);
for (A<int>::iterator it = a.begin(); it != a.end() ; ++it) {
std::cout << *it << std::endl;
}
return 0;
}
tal vez va a ser útil para alguien.
Sí. Leí mal el código. No estoy seguro de cómo sucedió eso. –