2011-01-01 4 views
7

나는 콜렉션 클래스를 작성하고있다. 컬렉션의 요소에 액세스 할 수 있도록 대괄호 연산자 ([])를 오버로드하고 싶습니다.대괄호 오버로드 값을 받아들이는 연산자

int operator[](int i) 
{ 
    // Do stuff here 
} 

내 문제는 내가 값을 받아이 연산자를 사용할 수 있도록이를 작성하는 방법을 볼 수 없다는 것입니다 :

myClassInstance[0] = value; 

내가와 대괄호 연산자를 선언 할 수있는 방법을 볼을 추가 인수 (요소에 할당 할 값).

나는 간단히 int &을 반환 할 수 있으며 호출자는 값을 할당 할 수 있지만 내부적으로 각 요소는 공개 된 것과 다른 형식으로 저장된다는 것을 알고 있습니다.

이것도 가능합니까?

+0

두 개의 연산자 [] (INT) 버전이 필요합니다. const 버전과 당신이 요청한 non-const 버전. 원래 버전은 const 객체를 호출하기 위해 const 뒤에 있어야합니다. –

+0

@ 에드윈 : 귀하의 다른 의견을 보았습니다. 나는 그것을 줄 것이다. 감사. –

답변

9

int으로 암시 적으로 변환 가능하며 int에서 할당 할 수있는 int_proxy 클래스를 작성하십시오. 이 프록시 클래스에서

operator int(); 
int_proxy& operator=(int); 

, 저장 당신은 검색 및 컨테이너의 값을 설정 할 수 있어야 어떤 정보 : 당신은 적어도 두 개의 멤버 함수가 필요합니다. 변환 연산자에서 검색을 수행하고 대입 연산자에서 대입합니다.

+1

원래 int 연산자 [] (int)는 const 수정자를 가져야한다는 것을 잊었습니다. const 수정자를 사용해야 const 객체에서 호출 할 수 있습니다. –

+0

나는 이것보다 더 간단하게 할 수 있다고 생각했다. 그러나 그것은 그 것처럼 보이지 않습니다. 감사! –

+0

@Edwin :'[] '를 사용하여'const' 객체를 읽을 수 있도록하는 방법이 있습니까? 동일한 연산자를 사용하여 비 const 객체를 읽고 쓰는 방법이 있습니까? – supercat

2

연산자가있는 개체에 대한 참조를 반환합니다.이 개체는 필요한 곳에 int를 넣을 수 있습니다. STL의 부울 벡터 속임수를 살펴보십시오. 꼭 그렇지는 않습니다.

1

쓰기 :

int& operator[](int i) 
    { 
     // Do stuff here 
    }