2016-11-30 60 views
1

我們有一些廣泛使用的類,包裝內部的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

回答

0

這似乎工作:

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