2009-11-16 12 views
8

Quelle est la quantité minimum de code pour créer un conteneur personnalisé qui fonctionnerait avec la macro Qt foreach?Condition de conteneur personnalisé pour travailler avec Qt's foreach

J'ai ce jusqu'à

template< class T > 
class MyList 
{ 
public: 
    class iterator 
    { 
    public: 

    }; 
    class const_iterator 
    { 
    public: 
    inline iterator& operator++() 
    { 
     return *this; 
    } 
    }; 
}; 

et je reçois cette erreur du compilateur:

4>.\main.cpp(42) : error C2100: illegal indirection 
4>.\main.cpp(42) : error C2440: 'initializing' : cannot convert from 'MyList<T>::const_iterator' to 'int' 
4>  with 
4>  [ 
4>   T=int 
4>  ] 
4>  No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called 

lorsque je tente de compiler ceci:

MyList<int> mylst; 
    foreach(int num, mylst) 
    qDebug() << num; 
+5

Notez que foreach crée une copie du récipient, ce n'est pas un gros problème car leurs classes implémentent copie à l'écriture, mais il pourrait être pour vous! –

Répondre

10

J'ai omis les implémentations factices que j'ai utilisées mais cela a compilé pour moi:

template< class T > 
class MyList 
{ 
public: 
    class const_iterator 
    { 
    public: 
     const T& operator*(); 
     bool operator!=(const const_iterator&) const; 
     const_iterator& operator++(); 
    }; 

    const_iterator begin() const; 
    const_iterator end() const; 
}; 
1

En tant que clause de non-responsabilité, je ne suis pas sûr que cela soit possible.

Consultez la définition de foreach dans qglobal.h. Il semble que vous deviez définir des méthodes begin et end.

Sur mon système, il se trouve à $QtInstallDir/src/corelib/global/qglobal.h