C# 제네릭 및 C++ 템플릿은 모두 매개 변수가 있는 형식을 지원하는 언어 기능입니다. 그러나 둘 사이에는 많은 차이점이 있습니다. 구문 수준에서 C# 제네릭은 C++ 템플릿의 복잡성 없이 매개 변수가 있는 형식에 대한 간단한 방법입니다. 또한 C#은 C++ 템플릿에서 제공하는 모든 기능을 제공하지 않습니다. 구현 수준에서 주요 차이점은 C# 제네릭 형식 대체가 런타임에 수행되고 제네릭 형식 정보가 인스턴스화된 개체에 대해 유지된다는 것입니다. 자세한 내용은 런타임의 제네릭을 참조하세요.
다음은 C# 제네릭과 C++ 템플릿 간의 주요 차이점입니다.
C# 제네릭은 C++ 템플릿과 동일한 양의 유연성을 제공하지 않습니다. 예를 들어 사용자 정의 연산자를 호출할 수는 있지만 C# 제네릭 클래스에서는 산술 연산자를 호출할 수 없습니다.
C#에서는 형식이 아닌 템플릿 매개 변수(예:
template C<int i> {}
.)를 허용하지 않습니다.C#은 명시적 특수화를 지원하지 않습니다. 즉, 특정 형식에 대한 템플릿의 사용자 지정 구현입니다.
C#은 부분 특수화를 지원하지 않습니다. 형식 인수의 하위 집합에 대한 사용자 지정 구현입니다.
C#에서는 형식 매개 변수를 제네릭 형식의 기본 클래스로 사용할 수 없습니다.
C#에서는 형식 매개 변수의 기본 형식을 허용하지 않습니다.
C#에서는 생성된 형식을 제네릭으로 사용할 수 있지만 제네릭 형식 매개 변수 자체는 제네릭이 될 수 없습니다. C++는 템플릿 매개 변수를 허용합니다.
C++는 템플릿의 모든 형식 매개 변수에 유효하지 않을 수 있는 코드를 허용합니다. 그러면 형식 매개 변수로 사용되는 특정 형식이 선택됩니다. C#에서는 클래스의 코드를 제약 조건을 충족하는 모든 형식으로 사용할 수 있도록 작성해야 합니다. 예를 들어 C++에서는 산술 연산
+
-
자와 형식 매개 변수의 개체를 사용하는 함수를 작성할 수 있습니다. 이 함수는 이러한 연산자를 지원하지 않는 형식으로 템플릿을 인스턴스화할 때 오류를 생성합니다. C#은 이를 허용하지 않습니다. 허용되는 유일한 언어 구문은 제약 조건에서 추론할 수 있는 구문입니다.
참고하십시오
.NET