C'è tale codice:Wrap STL vettoriale e il cambiamento del comportamento del suo iteratore
#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;
}
Questo è un wrapper per std::vector
con le mie funzioni aggiuntive. Vorrei utilizzare iteratore std::vector
's, ma voglio solo cambiare il comportamento di operator*
per iteratore:
T& operator*(){
// do some additional function
// normal behavior, return value of some element in vector
??
}
Come posso usare std::vector
e il suo iteratore con la modificazione di soli operator*
? Vorrei anche racchiudere funzioni come begin()
e end()
per l'iteratore, come avvolgerli correttamente?
EDIT:
Usando le punte dalle risposte a questo argomento, sono riuscito a risolvere il mio problema in questo modo:
#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;
}
forse sarà utile per qualcuno.
Sì. Ho letto male il codice. Non sono sicuro di come sia successo. –