템플릿 특수화와 부분 특수화는 C++의 고유한 메커니즘입니다. 템플릿 특수화는 특정 유형의 템플릿 매개변수에 대한 특정 구현을 제공하는 반면, 템플릿 부분 특수화는 일부 템플릿 매개변수를 기반으로 템플릿을 유형화하여 더욱 유연하게 사용할 수 있도록 해줍니다. 템플릿 특수화는 template 구문을 사용하는 반면, 템플릿 부분 특수화는 template
C++의 템플릿 특수화 및 템플릿 부분 특수화
템플릿 특수화
템플릿 특수화는 특정 유형의 템플릿 매개변수에 대한 특정 템플릿 구현을 명시적으로 제공하는 것을 의미합니다. 구문은 다음과 같습니다.
template <> class MyClass<MyType> { // 特化代码 };
예:
template <typename T> class MyClass { T value; public: MyClass(T v) : value(v) {} T getValue() { return value; } }; template <> class MyClass<int> { int value; public: MyClass(int v) : value(v) {} int getValue() { return value * 2; } }; int main() { MyClass<string> strObj("Hello"); cout << strObj.getValue() << endl; MyClass<int> intObj(5); cout << intObj.getValue() << endl; }
출력:
Hello 10
템플릿 부분 특수화
템플릿 부분 특수화는 템플릿의 일부를 기반으로 형식을 지정할 수 있는 특수 템플릿 특수화입니다. 템플릿 매개변수 . 구문은 다음과 같습니다.
template <typename T, typename U> class MyClass { // ... }; template <typename T> class MyClass<T, T> { // 偏特化代码 };
예:
template <typename T, typename U> class MyClass { T value1; U value2; public: MyClass(T v1, U v2) : value1(v1), value2(v2) {} T getValue1() { return value1; } U getValue2() { return value2; } }; template <typename T> class MyClass<T, T> { public: MyClass(T v) : value1(v), value2(v) {} T getValue1() { return value1; } T getValue2() { return value2; } }; int main() { MyClass<string, int> strIntObj("Hello", 5); cout << strIntObj.getValue1() << ", " << strIntObj.getValue2() << endl; MyClass<int> intObj(10); cout << intObj.getValue1() << ", " << intObj.getValue2() << endl; }
출력:
Hello, 5 10, 10
위 내용은 C++의 템플릿 전문화와 템플릿 부분 전문화?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!