[template] transformer une classe en template
bonjour j'ai le code suivant
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
| class ThreadList {
public:
class iterator{
private:
ThreadList *source;
int index = 0;
public:
iterator(ThreadList *source) : source(source){
try{
source->iteratorAdded();
}
catch (...){
}
};
iterator(iterator &iter) : iterator(iter.source) {
};
~iterator(){
try{
source->iteratorDeleted();
}
catch (...){
}
}
IThread* operator*()
{
try{
return source->list[index];
}
catch (...){
return NULL;
}
}
IThread* operator++()
{
IThread* i = source->list[index];
index ++;
return i;
}
bool operator!=(const int& rhs)
{
return !(index >= source->list.size() && rhs == 0);
}
};
private:
bool _AutoStart;
int _Iterator;
void iteratorAdded() {
_Iterator++;
cout << "iterator added = " << _Iterator << endl;
}
void iteratorDeleted(){
_Iterator--;
cout << "iterator deleted = " << _Iterator << endl;
if (_Iterator == 0){
clearList();
}
};
void clearList(){
cout << "Clear list" << endl;
};
public:
ThreadList(bool autoStart = true) {
_AutoStart = autoStart;
_Iterator = 0;
}
~ThreadList() {
for (vector<IThread*>::iterator it = list.begin();
it < list.end(); it++) {
delete (*it);
}
}
void add(IThread* thread) {
if (_AutoStart)
thread->start();
list.push_back(thread);
}
iterator begin(){
iterator it(this);
return it;
}
private:
vector<IThread*> list;
}; |
et j'essai de la transformer en template
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
| template<class T>
class ClearableList {
public:
class iterator{
private:
T source;
int index = 0;
public:
iterator(T source) : source(source){
try{
source.iteratorAdded();
}
catch (...){
}
};
iterator(iterator &iter) : iterator(iter.source) {
};
~iterator(){
try{
source->iteratorDeleted();
}
catch (...){
}
}
T operator*()
{
try{
return source.list[index];
}
catch (...){
return NULL;
}
}
T operator++()
{
IThread* i = source->list[index];
index++;
return i;
}
bool operator!=(const int& rhs)
{
return !(index >= source.list.size() && rhs == 0);
}
};
private:
int _Iterator;
void iteratorAdded() {
_Iterator++;
cout << "iterator added = " << _Iterator << endl;
}
void iteratorDeleted(){
_Iterator--;
cout << "iterator deleted = " << _Iterator << endl;
if (_Iterator == 0){
clearList();
}
};
void clearList(){
cout << "Clear list" << endl;
};
public:
ClearableList() {
_Iterator = 0;
}
~ClearableList() {
for (vector<T>::iterator it = list.begin();
it < list.end(); it++) {
delete (*it);
}
}
void add(T value) {
list.push_back(value);
}
iterator begin(){
iterator it(this);
return it;
}
private:
vector<T> list;
}; |
or j'ai un problème sur la fonction (il ne veut pas compiler)
Code:
1 2 3 4
| iterator begin(){
iterator it(this);
return it;
} |
vous auriez une idée ?