2012-02-04 1 views
0

개체의 컨테이너가 있는데 개체가 컨테이너 내에서 관리되기 때문에 읽기 전용 목록 만 반환하려고합니다.가변 객체로 읽기 전용으로 돌아 오는 가장 좋은 방법은 무엇입니까?

class Object; 

class Container { 
public: 
    typedef list<Object*> Objects; 

    // first method, probably slow 
    Objects getObjects() { return this->objects; } 
    // another method, but i don't know if it isn't lacking somewhere else 
    Objects::iterator getObjectsIt() { return this->objects.begin(); } 
    // OR any better method exists ?? 

private: 
    Objects objects; 
}; 
+0

C++에서는'this->'를 말할 필요가 없습니다. 이것은 Java 나 PHP가 아닙니다 :-) –

+0

알아요.하지만 나는'this'를 씁니다. ;) – kravemir

+1

나는 당신이 원하는 것을 꽤 이해하지 못한다 : 목록에 추가되거나 제거되지 않는 객체, 또는 이미 포함되지 않은 객체는 변경되지 않는다? –

답변

1

list의 멤버 함수와 호환되지 않는 특별한 유형의 이터레이터를 사용할 수 있습니다.이 함수는 반복자를 사용하여 객체에 액세스 할 수 있지만 해당 함수를 변경하는 함수로 전달할 수는 없습니다. 그들이 속한 목록.

반복기는 그들이 어떤 컨테이너에서 왔는지 기억하지 못한다고 가정합니다. 그렇다면 특수 이터레이터 클래스에 부모 컨테이너를 변경할 수있는 함수가 없도록하십시오.

1

const_iterator을 반환하고 const를 선언하십시오.

+0

하지만 개체를 ​​changle 수합니다. const_iterator가 그것에 영향을 미치지 않습니까? – kravemir

+0

이제 저는 당황합니다. 원하는게 뭐지? 반복자 만 노출하면 이미 컨테이너를 변형 할 수 없으므로 현재 코드의 문제점은 무엇입니까? –

+0

@Miro 변경 가능한 객체의 읽기 전용 목록이 필요하므로 객체는 변경할 수 있지만 목록은 변경할 수 없습니까? –

관련 문제