>  기사  >  백엔드 개발  >  C++ 함수에 대한 클래스 템플릿과 함수 템플릿의 차이점은 무엇입니까?

C++ 함수에 대한 클래스 템플릿과 함수 템플릿의 차이점은 무엇입니까?

WBOY
WBOY원래의
2024-04-11 22:03:01755검색

C++ 템플릿에는 클래스 템플릿과 함수 템플릿이 포함됩니다. 클래스 템플릿을 사용하면 다양한 데이터 유형에 사용할 수 있는 클래스를 생성할 수 있고, 함수 템플릿은 다양한 데이터 유형의 함수에 사용할 수 있습니다. 둘 사이의 주요 차이점은 클래스 템플릿은 명시적으로 인스턴스화되고 함수 템플릿은 암시적으로 인스턴스화된다는 것입니다. 클래스 템플릿에서는 유형 매개변수가 전체 클래스 정의에 표시되는 반면, 함수 템플릿에서는 시그니처에만 표시됩니다.

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

클래스 템플릿과 함수 템플릿의 주요 차이점은 다음과 같습니다.

  • 인스턴스화 방법: 클래스 템플릿은 a8093152e673feb7aba1828c43532094 표기법을 사용하여 생성됩니다(예: 배열)는 명시적으로 인스턴스화되는 반면, 함수 템플릿은 함수를 호출하고 유형 인수(예: max<int>(3, 5)</int>)를 전달하여 암시적으로 인스턴스화됩니다. .
  • a8093152e673feb7aba1828c43532094 符号(例如 Arraybd43222e33876353aff11e13a7dc75f6)显式实例化,而函数模板是通过调用该函数并传递类型参数(例如 maxbd43222e33876353aff11e13a7dc75f6(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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.