c++ 템플릿 예제

분명히 어딘가에 누군가가 생성자 정의및 someMethod() 정의에 대해 “패턴”을 사용하고 T가 실제로 int일 때 인스턴스화해야합니다. 그러나 생성자와 someMethod()의 정의를 파일 Foo.cpp에 넣으면 컴파일러는 Foo.cpp를 컴파일할 때 템플릿 코드를 볼 수 있으며 Bar.cpp를 컴파일할 때 Foo 를 볼 수 있지만 템플릿 코드를 모두 보았을 때는 결코 없을 것입니다. 그리고 푸. 따라서 위의 #2 Foo::someMethod()에 대한 코드를 생성할 수 없습니다. 가능하면 Convert의 클래스 템플릿 인스턴스를 모든 유형으로 변환할 수 있습니다. 다음 사용 예제: 함수 템플릿 특수화(이 경우 SFINAE가 적용될 수 있음)의 이름을 지정하지 않는 한 잘못된 단순 템플릿 ID는 컴파일 타임 오류입니다. 반면에 클래스 템플릿은 템플릿 매개 변수에 대한 형식/비형식 인수에 대한 기본 인수를 지원합니다. 예제 던지기: 클래스 템플릿 선언에 지정된 동일한 인수를 사용하여 기본 인수의 매개 변수를 명시적으로 전달하면 한 번만 인스턴스화됩니다. 이렇게 하면 생성된 다음 두 개체가 하나의 클래스만 인스턴스화합니다: Array 실제로 하나의 인수만 사용하는 템플릿이 있는 경우 프록시를 만들 수도 있습니다. 컴파일러에 의해 자동으로 추론할 수 없습니다. 올바른 호출은 TYPE이 무엇인지, 컴파일러가 이것이 함수 템플릿인지 확인하는 방법을 혼동할 수 있습니다. TYPE 형식은 어딘가에 typedef 키워드를 사용하여 정의되어 있습니까? 현재 거의 모든 최신 C++ 컴파일러가 템플릿 형식 사양을 종료하는 데 사용된다는 것을 이해할 수 있을 만큼 똑똑하므로 걱정할 필요가 없습니다. 따라서 템플릿 사양을 끝내기 위해 두 개 이상의 > 기호를 자유롭게 사용할 수 있습니다.

다음 예제에서는 데이터 형식 int, float 및 double을 사용하여 숫자를 정사각형으로 하는 코드를 나타내는 단일 템플릿이 있습니다. “일반성”(지나치게 구체적인 솔루션을 피하는 것을 의미함)과 혼동하지 말고” “일반성”은 클래스 템플릿을 의미합니다. 위의 예제를 생성하는 소스 코드는 다음과 같습니다: 경우에 따라 프로그래머는 명시적 전문화라고 하는 지정된 템플릿 형식 인수 집합에 대해 함수(또는 클래스)의 특수 버전을 구현하기로 결정할 수 있습니다. 이러한 방식으로 특정 템플릿 형식은 일반 구현보다 형식 또는 더 의미 있는 구현에 최적화된 특수 구현을 가질 수 있습니다. 이는 두 개의 ints를 취하고, 그들을 요약합니다. int 자체로 합산하는 것이 적절하지만이 함수 템플릿은 호출자가 요구하는 모든 유형에서 합계 (operator +사용)를 계산 할 수있는 기회를 제공합니다.

2nd August 2019 Uncategorized