2010-01-16 3 views

답변

2

주어진 예는 다음과 같습니다

template<class T, class C = Cmp<T> > 
int compare(const String<T>& str1, const String<T>& str2) 
{ 
    // ... compare using C 
} 

아이디어는 클래스 템플릿 Cmp 정의 또는 일부 T 불법되지 않을 수 있다는 점이다. 이 경우, 사용자 정의 비교 클래스 템플릿을 전달할 수 있습니다

compare<char, MyComparer>(str1, str2); 

당신이 실제로 컴파일 할 경우 Cmp가 사용되지 않으며 검사하지 않습니다, 그렇게한다면

.

0

예를 들어 매개 변수의 기본값이 X이지만 T를 지정하면 X의 의미가 검사되지 않습니다. 이것은 X가 컴파일되지 않을 수도 있기 때문에 중요합니다 (X에서 정의 할 수없는 연산자가 있기 때문에).

template <class T = int> 
struct foo 
{ 
    static int bar(T x) { return x.size(); } 
} 

int main() 
{ 
    std::cout << foo<std::string>::bar("hello") << std::endl; 
} 

int에 .size()가 정의되어 있지 않아도 오류가 발생하지 않습니다. int의 기본 매개 변수가 실제로 사용되지 않기 때문에 오류가 발생하지 않습니다.

귀하의 질문에 답변하십시오. X를 비교할 수 있다고 말하는 것이 아닙니다. T를 사용하면 X를 사용할 수 없기 때문에 X를 비교할 수 있는지 여부는 중요하지 않습니다.

관련 문제