2012-09-03 5 views
0

데이터 배열 0,0,1,1,2,2,5,5,7,7,2,2가 클래스의 데이터 멤버로 있고 그 아래 첨자 연산자를 정의한다고 가정합니다.첨자 연산자에 값을 할당하는 방법은 무엇입니까?

[I] 어레이의 날 (2) * I 소자 반환하지만 난 사용자 요소를 설정하도록 할 때문에

[I]를 = N 양 (2)에인가해야 * I 2 * I + 1.

그것은 사용자 만 첨자 오퍼레이터에게 표시로 할 수 있는가?

0,0,1,1,2,2,5,5,7,7,2,2 
[3] = 4; 
0,0,1,1,2,2,4,4,7,7,2,2 

다른 해결 방법은 무엇입니까? 일반적으로 두 요소 만이 아닙니다.

+2

예, 가능성은 (일반적인 구현은'연산자 [] '에서 리턴 프록시 인스턴스 것이다). 그러나 배열을 일반 배열로 시뮬레이트하고 읽을 때 멤버를 복제 할 수도 있습니다 (사용자 정의 배열을 사용하는 방법에 따라 수행해야하는 작업). –

+0

@ eq- 프록시에 대한 아이디어 감사합니다 !! – Yola

답변

1

간접적으로, 예. 제가 위에서 언급 한 바와 같이 당신이 그것을 구현할 수 있습니다 확신

struct AssignFunctor { 
    MyArrayType& parent; 
    size_t index; 
    AssignFunctor(MyArrayType& parent, size_t index) : parent(parent), index(index) {} 
    AssignFunctor& operator=(int k) { 
    parent.set(index,k); 
    parent.set(index*2,k); 
    } 
    operator int() const { 
    return parent.get(index); 
    } 
}; 

struct MyArrayType { 
    AssignFunctor operator[](size_t index) { 
    return AssignFunctor(*this,index); 
    } 
    int operator[](size_t index) const { 
    return get(index); 
    } 
    void set(size_t,int); 
    int get(size_t) const; 
}; 
1

:

당신은 펑 같이 기본적으로 작동하고 사양에 따라 값을 할당을 담당 첨자 연산자 전용 유형을 반환 할 수 있습니다 . 하지만 연산자 오버로딩에 대한 기본 규칙이 있습니다. 연산자의 의미를 변경하지 마십시오.

사용자 입장에서는 하나의 요소를 설정하고 있지만 다른 요소에도 적용됩니다. 의미있는 함수를 제공하거나 데이터 구조의 디자인을 변경하십시오.

+0

가리키는 주셔서 감사합니다. – Yola

관련 문제