그래서지도 const_iterator를 에뮬레이트하는 스마트 반복기가 있으며 내부적으로 반환 유형을 만들어야합니다. 분명히, 나는 그것을 수정해야하기 때문에 pair<Key, Value>
을 저장하고 싶다. (동시에 수정할 필요가있다.) 동시에 dereference 함수를 pair<const Key, Value>
(실제로는 const pair<const Key, Value>&
과 const pair<const Key, Value>*
이 될 것이다.)으로 표현하고 싶다. . 지금까지 내놓은 유일한 해결책은 반복자 클래스가 가리키는 값을 변경할 때마다 새로운 쌍을 동적으로 할당하는 것입니다. 말할 필요도없이 이것은 좋은 해결책이 아닙니다.<Key, Value> 쌍을 <const Key, Value> 쌍으로 캐스팅 할 수 있습니까?
또한 *const_cast<const pair<const Key, Value> >(&value)
을 시도했습니다. value
은 pair<Key, Value>
으로 표시됩니다.
도움이된다면 크게 도움이 될 것입니다.
호기심에 대한
편집 : 내 반복자 클래스의 pair<const Key, Value> p
를 저장 끝났다. 이 변경 될 수 있도록 한 쌍을 변경하기 위해 나는 다음과 같이 별도로 키를 보내고 기본 반복자 (map<Key, Value>::const_iterator it
), const_cast
에 따라 두 가지 요소를 변경 :
*const_cast<Key*>(&p.first) = it->first;
p.second = it->second;
아니 솔루션 난 정말 행복 해요 와 함께하지만, 그것은 일을 끝내고, 참조 할 수있는 올바른 유형의 것을 저장하고 있기 때문에 참조 해제 방법이 행복합니다.
문제가 있습니까? –
** 노력하지 않고도 작은 글을 게시하는 데 많은 시간을 할애해야한다고 생각하기는 어렵습니다. ** std :: pair p (1,2); std :: pair q = p; // fine' –
@Kerrek SB : 당신이 Op의 질문에서 중요한 부분을 간과했다고 생각합니다. 그는 자신의 커스텀 반복자의 역 참조/멤버 선택 연산자가 호출 될 때마다 새로운 쌍 객체를 생성하는 것을 피하고자합니다. 이것은 반복자가 잠재적으로 멤버 쌍을 저장하고 함수가 호출 될 때마다 또는 iterator가 증가/감소 될 때마다 복사해야한다는 것을 의미하므로 연산자에서 특히 중요합니다. – stinky472