C ++ 11 개 매개 변수의 기본 템플릿 함수 템플릿

템플릿 카테고리 : 제네릭 클래스의 설명은 일반적인 특정 유형의 다음 대체 어디 예를 들어, (일반 클래스를 정의하는 데 사용).

함수 서식 : (일반 함수를 정의하는 데 사용되는) 범용 기능 설명 인스턴스화 후 범용 형 콘크리트되는 여분이다.

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 ()는 편집의 실패의 결과를 추론 할 수 없다.

그리고 당신은이 예에서 볼 수있는 기본 템플릿 매개 변수는 일반적으로 함께 사용하는 기본 매개 변수와 기능을해야합니다.

또 다른 점은 주목해야한다 : 기본 양식 서식 함수 매개 변수 값은 템플릿 인수 공제 기반으로하지 않습니다. 기능이 제공의 템플릿 매개 변수 선택 기능은, 결국, 인수에서 파생됩니다.

 

좋은 좋은 연구, 하루 일까지.

주기 위해 요약을 선택

추천

출처www.cnblogs.com/Braveliu/p/12231451.html