C++ 템플릿에는 클래스 템플릿과 함수 템플릿이 포함됩니다. 클래스 템플릿을 사용하면 다양한 데이터 유형에 사용할 수 있는 클래스를 생성할 수 있고, 함수 템플릿은 다양한 데이터 유형의 함수에 사용할 수 있습니다. 둘 사이의 주요 차이점은 클래스 템플릿은 명시적으로 인스턴스화되고 함수 템플릿은 암시적으로 인스턴스화된다는 것입니다. 클래스 템플릿에서는 유형 매개변수가 전체 클래스 정의에 표시되는 반면, 함수 템플릿에서는 시그니처에만 표시됩니다.
C++의 클래스 템플릿과 함수 템플릿 비교
C++ 템플릿은 다양한 데이터 유형과 함께 사용할 수 있는 재사용 가능한 코드를 만들 수 있는 강력한 언어 기능입니다. C++에서는 클래스 템플릿과 함수 템플릿이라는 두 가지 유형의 템플릿을 제공합니다.
클래스 템플릿
클래스 템플릿을 사용하면 다양한 데이터 유형에 사용할 수 있는 클래스를 만들 수 있습니다. 즉, 정수, 부동 소수점 또는 기타 사용자 정의 클래스와 같은 다양한 데이터 유형을 가진 객체를 생성하는 데 사용할 수 있는 청사진을 생성할 수 있습니다.
template <typename T> class Array { public: Array(int size) : size(size), data(new T[size]) {} ~Array() { delete[] data; } T& operator[](int index) { return data[index]; } private: int size; T* data; };
함수 템플릿
함수 템플릿을 사용하면 다양한 데이터 유형에 사용할 수 있는 함수를 만들 수 있습니다. 마찬가지로, 다양한 매개변수 유형과 반환 값 유형을 사용하여 함수를 만드는 데 사용할 수 있는 템플릿을 만들 수 있습니다.
template <typename T> T max(T a, T b) { return (a > b) ? a : b; }
Difference
클래스 템플릿과 함수 템플릿의 주요 차이점은 다음과 같습니다.
<>
표기법을 사용하여 생성됩니다(예: < code> 배열max<int>(3, 5)
)를 전달하여 암시적으로 인스턴스화됩니다. . <>
符号(例如 Array<int>
)显式实例化,而函数模板是通过调用该函数并传递类型参数(例如 max<int>(3, 5)
)隐式实例化的。实战案例
类模板:创建一个 Pair
类模板,它存储两个不同类型的值。
template <typename K, typename V> class Pair { public: Pair(K key, V value) : key(key), value(value) {} K getKey() { return key; } V getValue() { return value; } private: K key; V value; };
我们使用 Pair
类模板创建了一个存储整数键和字符串值的 Pair
对象:
Pair<int, string> pair(1, "C++"); cout << pair.getKey() << " " << pair.getValue() << endl; // 输出:1 C++
函数模板:创建一个 swap
函数模板,用于交换两个不同类型值的顺序。
template <typename T> void swap(T& a, T& b) { T temp = a; a = b; b = temp; }
我们使用 swap
Pair
클래스 템플릿을 만듭니다. 🎜int x = 1; int y = 2; swap(x, y); // 互换 x 和 y 的值 cout << x << " " << y << endl; // 输出:2 1
Pair
클래스 템플릿을 사용하여 정수 키와 문자열 값을 저장하는 Pair
객체를 생성합니다. 🎜rrreee🎜🎜함수 템플릿: 🎜스왑 생성
두 가지 다른 유형의 값 순서를 교환하는 데 사용되는 함수 템플릿입니다. 🎜rrreee🎜두 개의 정수를 교환하기 위해 swap
함수 템플릿을 사용했습니다: 🎜rrreee위 내용은 C++ 함수에 대한 클래스 템플릿과 함수 템플릿의 차이점은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!