일부 C++ 연산자 오버로드 구문을 이해하는 데 도움이 필요합니다. (C++ 맵에 대한 연산자 오버로드
struct iterator : public map_t::iterator
{
iterator() {}
iterator(const map_t::iterator & it)
: map_t::iterator(it) {}
iterator(const iterator & it)
: map_t::iterator(
*static_cast<const map_t::iterator *>(&it)) {}
operator key_t() {return ((this->operator*()).first);} // I don't understand this.
operator ipdc_t*() const {return ((this->operator*()).second);} // or this.
};
그리고 begin()과 end() 시작 반환)하고 :
클래스의 작성자가 내부 맵 구조에 대한 반복자를 만들었습니다
template <class key_t, class ipdc_t>
class ipdc_map_template_t : public ipdc_lockable_t
{
...
typedef map<key_t,
ipdc_t*,
less<key_t>> map_t;
...
이 : 클래스는 다음과 같이 선언 지도의 끝() :
iterator begin() {IT_ASSERT(is_owner()); return map.begin();}
iterator end() {return map.end();}
내 질문은 내가 반복자가있는 경우, 어떻게 키와 값을 얻기 위해 그 오버로드를 사용합니까입니까?
ipdc_map_template_t::iterator iter;
for(iter = my_instance.begin();
iter != my_instance.end();
++iter)
{
key_t my_key = ??????;
ipdc_t *my_value = ??????;
}
용액이 충분하다 : 당신은 아직도 (I 더 읽기 찾기) 원래의 접근을
std::map::iterator
의 서브 클래스 사용할 수있다 그래서 어쨌든 : 암시 적 캐스트를 문법적 설탕으로 사용하는 것은 나쁘고 위험한 디자인입니다. IMHO ... – paercebal