8 Stimmen

Benutzerdefinierte Containeranforderung für die Arbeit mit Qt's foreach

Was ist die bloße minimale Menge an Code, um einen benutzerdefinierten Container zu erstellen, die mit Qt foreach Makro arbeiten würde?

Bislang habe ich Folgendes

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

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

und ich erhalte diesen Compiler-Fehler:

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

wenn ich versuche, dies zu kompilieren:

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

10voto

Troubadour Punkte 13047

Ich habe die Dummy-Implementierungen, die ich verwendet habe, weggelassen, aber das hat für mich kompiliert:

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;
};

1voto

Jesse Vogt Punkte 15441

Ich bin mir nicht sicher, ob dies möglich ist.

Lesen Sie die Definition von foreach in qglobal.h. Es sieht so aus, als müssten Sie eine begin y end Methoden.

Auf meinem System befindet sie sich unter $QtInstallDir/src/corelib/global/qglobal.h

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X