我如何在内部列表中支持基于范围的语句? (C++)

问题描述:

我们有一些广泛使用的类,包装内部的std ::列表我如何在内部列表中支持基于范围的语句? (C++)

template <class COLL_TYPE> 
class OurColl 
{ 
... 
    private: 
    std::list<COLL_TYPE> *m_pList; 

我希望能够使用基于for循环的范围:

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

} 

这必须迭代基础m_pList。

我觉得这个问题是不同的,因为它最接近克里斯雷德福在标记为重复的问题底部提供的答案。

此外,还有一点扭曲,因为我在一个包装一个内部列表模板的类。

+0

请原谅我的好奇,为什么你有一个*指针*到一个列表?如果你没有指针,你可以靠[零规则](http://en.cppreference.com/w/cpp/language/rule_of_three#Rule_of_zero)来生活,这会让你的生活(和班级)简单。 –

+0

重要的部分是你需要一个'begin'和'end'函数来返回一个正向迭代的对象。这是重复状态下的答案(或许是冗长的方式)。在这种情况下最简单的方法是使用包装列表迭代器。 –

+0

我的示例代码看起来是否正确?这是在我们的项目中广泛使用的非常旧的代码,我希望使它更容易使用。 – Derek

这似乎工作:

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