与Qt的foreach一起使用的自定义容器要求

8

如何编写最少量的代码来创建一个自定义容器,以便与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;

5
请注意,foreach创建容器的副本。虽然它们的类实现了写时复制,但这并不重要,但对你来说可能会有所影响! - Nikola Smiljanić
2个回答

10
我省略了我使用的虚拟实现,但这对我编译成功了:
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

免责声明,我不确定这是否可能实现。

请查看qglobal.h中foreach的定义。看起来您可能需要定义beginend方法。

在我的系统中,它位于$QtInstallDir/src/corelib/global/qglobal.h


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接