2009-11-16 16 views
8

¿Cuál es la cantidad mínima de código para crear un contenedor personalizado que funcione con la macro de Qt foreach?Requisito de contenedor personalizado para trabajar con foreach de Qt

tengo esto hasta ahora

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

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

y yo estoy recibiendo este error del compilador:

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 

cuando intento compilar este:

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

Tenga en cuenta que foreach crea copia del contenedor, esto no es un gran problema ya que sus clases implementan copiar al escribir pero podría ser para usted! –

Respuesta

10

he omitido las implementaciones ficticias que utilicé pero esta compiladas para mí:

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

Como descargo de responsabilidad no estoy seguro de si esto es posible.

Echa un vistazo a la definición de foreach en qglobal.h. Parece que puede necesitar definir un begin y end métodos.

En mi sistema que se encuentra en $QtInstallDir/src/corelib/global/qglobal.h

Cuestiones relacionadas