2012-06-29 2 views
2

내 코드에서 나는 정확한 행동이 함수 객체에 의해 커스터마이징 될 수 있다는 점에서 몇 가지 표준 라이브러리 알고리즘과 유사한 디자인 전략을 채택하고있다. 가장 간단한 예제는 std :: sort입니다. 함수 객체는 객체 간의 비교 방법을 제어 할 수 있습니다.왜 기본 템플릿 매개 변수가있는 구현이 아닌 std :: sort (비교기가 있거나없는)의 두 가지 구현이 있습니까?

Visual C++는 자연스럽게 코드 복제와 관련된 std :: sort의 두 가지 구현을 제공합니다. 대신 단 하나의 구현을 가질 수 있고 기본 비교 자 (연산자 < 사용)를 기본 템플릿 매개 변수로 제공 할 수 있다고 상상했을 것입니다.

두 가지 버전의 합리적인 이유는 무엇입니까? 내 제안에 따라 인터페이스가 좀 더 복잡해질까요? 또는 객체가 연산자 <을 제공하지 않으면 혼동되는 오류 메시지가 나타 납니까? 아니면 그냥 작동하지 않을 수도 있습니다?

감사합니다,

다윗은

+2

"Visual C++는 자연스럽게 코드 중복을 포함하는 std :: sort의 두 가지 구현을 제공합니다. *"왜 그렇게 생각하니? 확실한 구현은 술어 인수가 부족하여 술어 인수 (인수에 대해'std :: less :: value_type>()'을 전달하는 과부하의 관점에서 구현되는 과부하에 대한 것입니다). – ildjarn

+0

_ "왜 그렇게 생각하니?"_ 저는 Visual C++와 함께 제공되는 알고리즘의 구현을보고 두 가지 별도의 구현을 보았습니다. – PolyVox

+0

그건 분명히 좋지 않은 구현입니다. 나는 '자연스럽게'라는 단어를 골랐다. – ildjarn

답변

12

기능 템플릿이 기본 유형의 인수를 위해 표준에 의해 허용되지 않기 때문에.

This, however, was amended in C++11 이제 함수 템플릿에는 기본 형식 인수가있을 수 있습니다.

+1

짧고 달콤한. –

+3

나는 C++ 11이 허용했기 때문에 이것이 정확한 역사가없는 이유라고 언급 할 것이다. –

+0

C++의 템플릿에 대해 알지 못하면 함수 템플릿을 오버로드 할 수 있습니까? – JAB

2

이전에는 함수 템플릿에 기본 템플릿 인수가 없으며 템플릿 인수를 기본 함수 인수에서 추론 할 수 없으므로이 방법을 사용할 수 없었습니다.

함수 템플릿의 기본 템플릿 인수를 지원하는 C++ 11에서는 단일 함수 템플릿을 사용할 수 있지만이 함수 템플릿을 변경하면 특정 형식의 함수를 사용하는 이전 C++ 코드와의 하위 호환성이 손상 될 수 있습니다.

+0

네, 감사합니다. 나는 사용자로부터 C++ 11 지원을 요구하지 않기 때문에 STL 모델을 따를 것이라고 생각합니다. – PolyVox

+0

아직 C++ 11의 기본 함수 템플릿 인수를 지원하지 않아서 Visual C++ (질문에 표시 함)를 지원하는 경우에 특히 중요합니다 .-) –

+0

아, 글쎄, 그걸 정착합니다 .-) – PolyVox

관련 문제