2013-06-10 4 views
1

저는 C++을 처음 사용하고 제 질문이 간단 해 보일 수 있습니다. 나는이 코드를 이해할 수 없다 :클래스의 템플릿 사용

template<typename a, typename b> 
bool operator < (const Pair<a,b> &op1 , const Pair<a,b> &op2) 
{ 
    return (op1.first() < op2.first()) 
}; 

그것은 그 연산자는 함수와 출력 타입이 BOOL 인 것 같다. 그럼 그 "템플릿"은 무엇입니까? 이 템플릿은 클래스 정의 이전에 정의되었으므로

 template<typename a, typename b> 
    class Pair { ... 
+0

기능 템플릿에서 템플릿을 더 읽기

선언되었지만 아직 정의되지 않은 유형을 사용하는 방법에 대한 특별한 규칙을 가지고 않습니다. 이 경우,'operator <'함수 다음에 클래스 정의를 갖는 것은 합리적입니다. 컴파일러가 알 수 있도록'Pair' 클래스 템플릿 *이'operator *'함수 앞에 있어야합니다. 'Pair'는 클래스 템플릿이 아니라 글로벌 변수가 아닙니다.) – dyp

답변

1

그래서 "템플릿"은 무엇입니까? -이 경우에는 동적 유형 매개 변수를 '<'연산자에 전달하는 데 사용됩니다. 기본적으로 템플릿을 사용하므로 한 번만 클래스/메소드를 선언 할 수 있으므로 다른 데이터 유형도 전달할 수 있습니다 . 귀하의 경우 템플릿을 사용하지 않으면 '<'연산자가 처리하고자하는 각 데이터 형식에 대해 오버로드 된 메서드를 만들 수 있습니다.

BTW : 연산자는 함수가 아니며 연산자에 과부하가 걸린 키워드입니다 (이 경우 '<'보다 작음).

2

템플릿은 ab이 나타나는 유형으로 대체됩니다. 즉, int,double, int,int, double,int, double,double 등을 처리하는 코드를 명시 적으로 작성할 필요가 없습니다. 템플릿이 없으면 모든 경우에 함수 오버로드를 작성하거나 typecasting에 의존해야합니다.

전체 클래스에 해당 템플릿을 배치하면 해당 클래스가 지정한 유형을 포함하도록 클래스가 특별히 작성되었음을 의미합니다. 따라서 Pair<a,b>Pair<int,double> 일 수 있습니다.

1

C++의 템플릿은 일반적인 클래스를 정의하는 방법입니다.

당신이 맞습니다 이 연산자는 기능입니다.

일반 클래스를 사용하면 해당 메소드에서 사용하는 일반 유형을 지정하지 않은 클래스를 정의 할 수 있습니다.

당신이 Pair<int, string> param1Pair<int, string> param2을 정의하고 모두 intstring 값을 기반으로 더 큰 어떤 매개 변수를 결정할 수 것 bool resultOfcomparision = param1 < param2

에 적용 할 수있는 방법입니다. 이 templates guide

+0

이 문장은 틀린 것입니다 : '당신은 연산자가 함수라는 것이 옳습니다.' 연산자는 항상 함수는 아니며, 'sizeof'는 훌륭한 예제입니다. 런타임이 아니라 컴파일 타임입니다. –

+0

글쎄, 당신 말이 맞아. 나는 "이 연산자"대신에 "연산자"를 써야했다. –

관련 문제