2016-11-30 4 views
1

우리가 내부 표준 : : 목록을 포장 일부 널리 사용되는 클래스내부 목록에 대한 명세서 기반 범위를 어떻게 지원할 수 있습니까? (C++)

template <class COLL_TYPE> 
class OurColl 
{ 
... 
    private: 
    std::list<COLL_TYPE> *m_pList; 
내가 루프를 기반으로 범위를 사용할 수 있도록하고 싶습니다

:

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

} 

이 것을 밑에있는 m_pList를 반복해야한다.

나는이 질문이 복제본으로 표시된 질문 맨 아래의 Chris Redford가 제공 한 답변에 가장 가깝기 때문에 충분히 다른 것으로 느낍니다.

또한 내부 목록을 래핑하는 템플릿이있는 클래스에 있기 때문에 비틀어 짐이 조금 있습니다.

+0

서하십시오 내 호기심을,하지만 당신은 왜리스트에 * 포인터 *이 있습니까? 포인터가없는 경우에는 [0의 규칙] (http://en.cppreference.com/w/cpp/language/rule_of_three#Rule_of_zero)을 통해 생활 할 수 있으며, 이로 인해 평생 동안 (그리고 클래스) 더 간단 해. –

+0

중요한 부분은 forward iterable 인 객체를 반환하는'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(); 
    }