2009-03-30 7 views
2

다양한 매개 변수를 사용하여 찾기, 지우기 및 삽입과 같은 메서드에 STL 구현을 오버로드하려면 어떻게해야합니까? STL 메서드의 오버로드를 찾으려고했지만 어떤 도움도 찾을 수 없었습니다.C++ STL 메서드 오버로드

+0

과부하가 _do_입니까? std :: for_each (iter1, iter2, fc)에서와 같이? 또는 vector :: find, map :: erase etc ...와 같이 오버라이드에 대해 이야기하고 있습니까? – xtofl

+0

아마 당신은 STL이 아닌 C++ 표준 라이브러리를 의미합니다. –

답변

11

클래스의 코드를 편집하지 않고 클래스의 메서드를 오버로드 할 수 없습니다.

도우미 역할을하는 자유로운 기능을 작성하십시오. 해당 컨테이너 클래스를 첫 번째 매개 변수로 사용합니다.

클래스에서 상속 받아 방법을 추가 할 수는 있지만 표준 컨테이너 클래스는 상속 될 수 없습니다.

+0

설명 : 비 가상 dtor로 포인터를 통해 파생 된 객체를 파괴하는 것은 엄격히 UB입니다. 그리고 std 컨테이너 클래스는 vtable을 원하지 않기 때문에 비 가상 dtors를가집니다. STL은 정적 다형성을 위해 설계되었으므로 제안 된 솔루션은 [...] –

+0

[..] 벡터와 동일한 개념을 준수하는 클래스를 만들어 그 인스턴스를 함수 템플릿에 전달합니다. 이것이 실용적인지 여부는 논쟁의 여지가있다. –

+1

그건 내 제안이 아니야! :) –

3

std 네임 스페이스에 오버로드를 추가 할 수 없습니다. 사용자 고유의 데이터 유형에 대한 함수 및 알고리즘의 특수화 만 허용됩니다. 다른 find, erase, insert ...를 원한다면 (std 네임 스페이스에서) wrapper를 구현하고 그것을 사용하십시오.

그리고 나는 추천하지 않을 것입니다 ... 어떤 종류의 과부하를 제공 하시겠습니까?

+0

각각 다른 유형의 사용자 정의 인수가 있습니다. – Elroy

1

이 작업을 수행 할 수 없습니다. 표준은 그것을 금지합니다.

관련 문제