C++ 如何为内部列表支持基于范围的for语句?(c+;+;)

C++ 如何为内部列表支持基于范围的for语句?(c+;+;),c++,iterator,stdlist,C++,Iterator,Stdlist,我们有一些广泛使用的类,它们包装了一个内部std::list template <class COLL_TYPE> class OurColl { ... private: std::list<COLL_TYPE> *m_pList; 模板 奥科尔班 { ... 私人: 标准::列表*m_pList; 我希望能够使用基于范围的for循环: OurColl<int> listInts; for ( int x : listInts ) {

我们有一些广泛使用的类,它们包装了一个内部std::list

template <class COLL_TYPE>
class OurColl
{
...
    private:
    std::list<COLL_TYPE> *m_pList;
模板
奥科尔班
{
...
私人:
标准::列表*m_pList;
我希望能够使用基于范围的for循环:

OurColl<int> listInts;
for ( int x : listInts )
{

}
OurColl列表;
用于(整数x:listInts)
{
}
这必须迭代底层的m_pList

我觉得这个问题已经足够不同了,因为它最接近Chris Redford在问题底部提供的答案,标记为重复

另外,由于我在一个类中,有一个模板包装了一个内部列表,所以有一点扭曲。

这似乎是可行的:

  typename std::list<COLL_TYPE>::iterator begin()
   {
      return m_pList->begin();
   }
   typename std::list<COLL_TYPE>::iterator end()
   {
      return m_pList->end();
   }
   typename std::list<COLL_TYPE>::const_iterator begin() const
   {
      return m_pList->begin();
   }
   typename std::list<COLL_TYPE>::const_iterator end() const
   {
      return m_pList->end();
   }
typename std::list::iterator begin()
{
返回m_pList->begin();
}
typename std::list::迭代器end()
{
返回m_pList->end();
}
typename std::list::const\u迭代器begin()const
{
返回m_pList->begin();
}
typename std::list::const\u迭代器end()const
{
返回m_pList->end();
}
这似乎有效:

  typename std::list<COLL_TYPE>::iterator begin()
   {
      return m_pList->begin();
   }
   typename std::list<COLL_TYPE>::iterator end()
   {
      return m_pList->end();
   }
   typename std::list<COLL_TYPE>::const_iterator begin() const
   {
      return m_pList->begin();
   }
   typename std::list<COLL_TYPE>::const_iterator end() const
   {
      return m_pList->end();
   }
typename std::list::iterator begin()
{
返回m_pList->begin();
}
typename std::list::迭代器end()
{
返回m_pList->end();
}
typename std::list::const\u迭代器begin()const
{
返回m_pList->begin();
}
typename std::list::const\u迭代器end()const
{
返回m_pList->end();
}

请原谅我的好奇,但为什么你有一个指向列表的指针?如果你没有指针,你可以依靠它生活(和课堂)更简单。重要的部分是,您需要一个
开始
结束
函数来返回一个可转发的对象。这就是重复状态下的答案(可能是冗长的)。在这种情况下,最简单的方法是使用包装列表迭代器。我的示例代码看起来正确吗?这是在我们的项目中广泛使用的非常旧的代码,我希望使它更易于使用。请原谅我的好奇,但为什么你有一个指向列表的指针?如果你没有指针,你可以依靠它生存,这将使你你的生活(和类)更简单。重要的部分是你需要一个
开始
结束
函数,它返回一个可转发的对象。这就是重复状态下的答案(可能是冗长的方式)。在这种情况下,最简单的方法是使用包装列表迭代器。我的示例代码看起来正确吗?这是在我们的项目中广泛使用的非常旧的代码,我希望使它更易于使用。