有這樣的代碼:裹STL向量和改變行爲
#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;
}
這是std::vector
用我自己的附加功能的包裝。我想用std::vector
的迭代器,但我只想要更改的迭代器operator*
行爲:
T& operator*(){
// do some additional function
// normal behavior, return value of some element in vector
??
}
如何使用std::vector
及其僅爲operator*
修改迭代器?我還想爲迭代器打包begin()
和end()
等函數,如何正確包裝它們?
編輯:
使用技巧從這個話題的答案,我設法解決我在下面的方式問題:
#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;
}
也許會有人幫助。
是的。我誤解了代碼。不知道這是怎麼發生的。 –