2014-03-25 2 views
1

지금까지 C++ 초보자로서 오버로드에 대한 경험은 복사, 할당 연산자 및 I/O 스트림 연산자로만 제한되었습니다.연산자 템플릿없이 오버로드

지금 I 다음 오버해야한다는 것을 의미하는 파스 트리 노드 클래스의 반복기를 만들어야

:

  1. ==
  2. * (참조 연산자)
  3. ++
  4. -
  5. > =

내가 인터넷 등을 수색 한 잘 C + +로 여러 도서지만, 지금까지 나는 템플릿에 대한 참조없이) 내 특별한 경우에는 적합하지 않지만, 나는 후위 및 접두사의 경우 모두 "두 번"과부하가 필요하다는 것을 배웠다.

사람이 하나가

뒤에 추론뿐만 아니라이 작업을 수행 할 방법을 설명시겠습니까 주셔서 감사합니다 :)이 주제 해제되고 있어요 경우

내가 죄송합니다.

+5

우선 [this] (http://stackoverflow.com/questions/4421706/operator-overloading)을 참조하십시오. – jrok

+0

@jrok 감사합니다. 나는 활기와 함께 그것을 소비 할 것이다 –

+1

여기를 보아라 : http://stackoverflow.com/questions/4421706/operator-overloading – jfly

답변

1

라이브러리의 boost::iterator_facade을 살펴볼 수 있습니다.

equal(), derefence(), increment(), decrement(), advance()distance() 멤버 함수를 정의 할 수 있습니다. 이 멤버에서, 라이브러리는 ==, !=, *, ++, --, +=, -=, []를 생성하고, 관계 연산자 <, >, 당신을 위해 <=, >=.

당신도 이것을 손으로 정의 할 수 있지만, 지적한대로 많은 코드 중복 (동등성과 불평등, 사전 및 사후 증가)이 있습니다. 게다가, 반복자는 표준 라이브러리와 잘 어울리기 위해 특정 typedef에 대한 액세스와주의 깊게 정의 된 반환 유형 및 임시 라이브러리의 수명 관리를 필요로합니다. Boost.Iterator는 직접 모든 세부 작업을 손쉽게 처리합니다.

linked-list iterator에 대한 작업 예제가 트리 반복기에 적용 할 수 있습니다.

참고 : 템플릿을 직접 정의 할 필요는 없지만 iterator facade 자체는 템플릿이므로 특정 유형의 트리 클래스로 인스턴스화 할 수 있습니다.