템플릿 카테고리 : 제네릭 클래스의 설명은 일반적인 특정 유형의 다음 대체 어디 예를 들어, (일반 클래스를 정의하는 데 사용).
함수 서식 : (일반 함수를 정의하는 데 사용되는) 범용 기능 설명 인스턴스화 후 범용 형 콘크리트되는 여분이다.
98은 C ++ 모두 표준 [1]의 차이점
함수 템플릿과 클래스 템플릿은 표준 C ++ 98과 함께 도입, 모두의 주요 차이는 있습니다 :
때 표준 기본 템플릿 인수를 할 수 있도록 클래스 템플릿 선언. 함수 템플릿은 지원되지 않습니다.
매개 변수 기본 템플릿은 기본 함수 매개 변수 역할을합니다. 그러나 C ++ 11은,이 제한은 다음 예에서 해제되었습니다
. 1 공극 DefParm ( INT m = . 3 ) {} // C ++ 컴파일러 (98)는 C ++ 컴파일러 11 (2) . (3) 템플릿 <유형 이름 T = INT > . 4 급 defclass {} // C ++ 컴파일러 98 C ++ 컴파일러 11 . 5 . 6 템플릿 <유형 이름 T = INT > 7. 보이드 DefTempParm () {} // C ++ 컴파일러 98이 실패 C ++ 컴파일러 11
당신은 DefTempParm 기능 템플릿은 기본 템플릿 매개 변수 (int 형)을 가지고 볼 수 있습니다.
사용은 C ++ 컴파일러 (98) 지원, 컴파일러 DefTempParm 실패, 그리고 C에 대한 컴파일러 지원합니다 ++ (11)는 아무 문제가 없다.
두 [2] 표준 C ++ 11 차이점
C ++ 11 지원 기본 템플릿 템플릿 매개 변수 기능을하지만,하지만, 구문, 둘 사이의 차이는 여전히 존재한다 :
몇 가지 기본 템플릿 매개 변수 선언에 대한 기본 값을 지정할 클래스 템플릿은, 규칙 "왼쪽에서 오른쪽"에 따라 지정해야합니다.
그리고 함수 템플릿이 규칙은 필요하지 않습니다. 다음 예는 다음과 같다 :
. (1)는 템플릿 <는 유형 이름 유형 이름 T1 내지, T2는 = INT는 > 2 개 클래스 DefClass1 {} 3. 4. 템플릿 <유형 이름 T1 내지 = INT , 유형 이름 T2> 5 개. 클래스 DefClass2 {} // ERROR : 컴파일되지 : 템플릿 파라미터는 디폴트 값은 아니기 때문에 규칙 "오른쪽에서 왼쪽으로"따라 6. 7. 템플릿 <유형 이름 T, INT I = 0 > 8 개. 클래스 DefClass3 {}; 9. 10 템플릿 < INT I = 0 , 유형 이름 T> (11 개). 클래스 DefClass4을 {}; // 오류 : 없음 에 의해 컴파일: 파라미터의 디폴트 값은 "오른쪽에서 왼쪽"템플릿을 수행하지 않기 때문에 규칙 (12)은 13 서식 <유형 이름 T1 내지 = INT , 유형 이름 T2> 14 보이드 ; DefFunc1 TL (A, T2 B) {} // 따르지 않는 OK 기능 템플릿은 " 오른쪽에서 왼쪽 "룰 15 16 서식 < INT I = 0 , 유형 이름 T> . 17 무효 {} DefFunc2 (T의 a); // 확인 함수 템플릿을 따르지 않는"오른쪽에서 왼쪽 "룰
우리는뿐만 왼쪽과 DefClass4 템플릿 클래스 DefClass2 오른쪽에서 기본 클래스 템플릿 매개 변수가 컴파일되지 않습니다 정의 볼 수 있습니다.
함수 템플릿으로 기본 템플릿 매개 변수 위치는 더 캐주얼입니다.
DefFunc1 및 DefFunc2 첫 번째 템플릿 매개 변수에 대한 기본 매개 변수를 정의하고, 두 번째 템플릿 매개 변수의 기본 값은 11 컴파일러는 아무 문제가 없다 생각 ++, C를 정의되지 않습니다.
기능 템플릿 인수 추론 규칙은 복잡하지 않습니다. 간단하게 말해서 : 당신이 경우 함수 인수의 유형에서 추론 할 수있는 경우에, 기본 템플릿 매개 변수 그렇지 않으면, 기본 템플릿 인수를 사용할 수 있습니다, 사용할 수 없습니다.
다음의 예 :
. (1) 서식 < 클래스 T, 클래스 U 상 = 더블 > 2 공극 F (T = T 0 은 U-U = 0 ) {} . 3 공극 G () 4. { 5. F ( 1. , ' C ' ); // F <INT 숯불> (1, 'C'). 6. F ( 1. ) // F <INT, 더블> (1, 0). 사용 디폴트 파라미터 더블 템플릿 7. F를 (); // 오류 : T를 도출 할 수 없다 . 8 F < INT > (); //F <INT, 더블> (0 , 0), 사용하는 디폴트 파라미터 템플릿 더블 9. F < INT , CHAR > (); // F <INT, CHAR> (0, 0) (10) }
그것은 기본 템플릿 인자 및 기본 함수 매개 변수를 사용하는 동안 f를 함수 템플릿 (F)을 정의합니다.
템플릿 파라미터의 함수가 기능 중에 인자로부터 유도 될 수 있기 때문에 그것은 것을 알 수있다 :
F (1) 함수 호출, 호출이 인스턴스화 템플릿 함수일 F <INT 더블> U 파라미터 제 2 타입 이중 기본 파라미터 템플릿 유형을 사용하여, 상기 (1, 0), 및 함수 인수 또는 제로의 디폴트 값입니다.
마찬가지로, F <INT> () 두 번째 파라미터 타입의 템플릿 함수의 인스턴스를, 값 0.
T 파라미터 제 1 타입과 같은 식 F ()는 편집의 실패의 결과를 추론 할 수 없다.
그리고 당신은이 예에서 볼 수있는 기본 템플릿 매개 변수는 일반적으로 함께 사용하는 기본 매개 변수와 기능을해야합니다.
또 다른 점은 주목해야한다 : 기본 양식 서식 함수 매개 변수 값은 템플릿 인수 공제 기반으로하지 않습니다. 기능이 제공의 템플릿 매개 변수 선택 기능은, 결국, 인수에서 파생됩니다.
좋은 좋은 연구, 하루 일까지.
주기 위해 요약을 선택