Пользовательское требование контейнера для работы с foret Qt - PullRequest
8 голосов
/ 17 ноября 2009

Каков минимальный объем кода для создания пользовательского контейнера, который будет работать с макросом Qt foreach?

Пока у меня есть это

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

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

и я получаю эту ошибку компилятора:

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

когда я пытаюсь скомпилировать это:

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

Ответы [ 2 ]

10 голосов
/ 17 ноября 2009

Я опустил фиктивные реализации, которые использовал, но это скомпилировано для меня:

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 голос
/ 17 ноября 2009

Как заявление об отказе от ответственности, я не уверен, возможно ли это.

Проверьте определение foreach в qglobal.h. Похоже, вам может понадобиться определить методы begin и end.

В моей системе он находится на $QtInstallDir/src/corelib/global/qglobal.h

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...