C++ 템플릿 여러 유형

Sheeraz Gul 2023년10월12일
C++ 템플릿 여러 유형

이 자습서에서는 C++에서 다중 유형 템플릿을 사용하는 방법을 보여줍니다.

C++ 템플릿 여러 유형

C++의 템플릿은 일반 함수와 클래스를 만들기 위한 공식의 청사진으로 정의할 수 있습니다. 템플릿은 C++에서 간단하지만 강력한 도구입니다. 아이디어는 데이터 유형을 매개 변수에 전달하여 다른 데이터 유형에 대해 동일한 코드를 다시 작성하지 않도록 하는 것입니다.

템플릿은 컴파일 타임에 매크로처럼 확장됩니다. 유일한 차이점은 컴파일러가 템플릿을 확장하기 전에 데이터 유형을 확인한다는 것입니다.

소스 코드에는 클래스 또는 함수만 포함되지만 컴파일러 코드에는 이러한 클래스 또는 함수의 여러 복사본이 포함되는 템플릿을 정의할 수 있습니다.

이제 다중 유형 템플릿은 템플릿이기도 하고 해당 클래스 템플릿 정의 외부에서 정의되는 클래스의 멤버 템플릿으로 정의할 수 있습니다. 이 클래스 정의는 멤버 템플릿 매개변수가 뒤따르는 클래스 템플릿의 템플릿 매개변수로 지정해야 합니다.

C++에는 두 가지 유형의 템플릿이 있습니다.

기능 템플릿

함수 템플릿은 여러 데이터 유형을 동시에 사용할 수 있지만 표준 함수는 사용할 수 없습니다. 함수 템플릿의 구문은 다음과 같습니다.

template <class DataType>
Returntype FunctionName(parameter list) {
  // function body
}

함수 템플릿의 간단한 예를 살펴보겠습니다.

#include <iostream>
using namespace std;

// This template function will work for all data types/ it will return the
// minimum value from given parameters
template <typename Delftstack>
Delftstack MinValue(Delftstack a, Delftstack b) {
  return (a < b) ? a : b;
}

int main() {
  cout << MinValue<int>(78, 354) << endl;  // Call the template function for int
  cout << MinValue<double>(336.23, 4673.23)
       << endl;  // Call the template function for double
  cout << MinValue<char>('s', 'y')
       << endl;  // Call the template function for char

  return 0;
}

위 함수에는 모든 데이터 유형에 대해 작동하고 주어진 값에서 최소값을 반환하는 템플릿 함수 MinValue가 포함되어 있습니다. 출력을 참조하십시오.

78
336.23
s

클래스 템플릿

클래스 템플릿은 일반 템플릿이 함수 템플릿과 유사하게 작동한다는 것도 알고 있습니다. 클래스 템플릿은 C++에서 클래스 계열을 정의합니다. 클래스 템플릿의 구문은 다음과 같습니다.

template <class Ttype>
class ClassName {
  // class body;
}

이제 클래스 템플릿을 사용하여 예제를 시도해 보겠습니다.

#include <iostream>
using namespace std;

template <typename Delftstack>
class DemoArray {
 private:
  Delftstack* ptr;
  int arraysize;

 public:
  DemoArray(Delftstack arr[], int number);
  void print();
};

template <typename Delftstack>
DemoArray<Delftstack>::DemoArray(Delftstack arr[], int number) {
  ptr = new Delftstack[number];
  arraysize = number;
  for (int x = 0; x < arraysize; x++) ptr[x] = arr[x];
}

template <typename Delftstack>
void DemoArray<Delftstack>::print() {
  for (int x = 0; x < arraysize; x++) cout << " " << *(ptr + x);
  cout << endl;
}

int main() {
  int arr[7] = {23, 12, 43, 74, 55, 36, 67};
  DemoArray<int> demo(arr, 7);
  demo.print();
  return 0;
}

위의 코드는 배열의 멤버를 인쇄하기 위해 템플릿 배열 클래스와 템플릿 메서드를 생성합니다. 템플릿 클래스 외부에서 멤버 템플릿을 정의했습니다. 출력을 참조하십시오.

23 12 43 74 55 36 67

여러 유형의 클래스 템플릿

여러 유형의 클래스 템플릿은 C++에서 가능한 여러 매개 변수를 사용하여 클래스 템플릿을 정의해야 함을 의미합니다. 여러 유형으로 클래스 템플릿을 정의하는 구문은 다음과 같습니다.

template <class Delft1, class Delft2, class Delft3 = char>
class DemoClassTemplate {
  // class body
}

여러 유형이 있는 클래스 템플릿을 이해하기 위해 예제로 이동해 보겠습니다.

#include <iostream>
using namespace std;

// Class template containing multiple type parameters
template <class Delft1, class Delft2, class Delft3 = char>
class DemoClassTemplate {
 private:
  Delft1 value1;
  Delft2 value2;
  Delft3 value3;

 public:
  DemoClassTemplate(Delft1 v1, Delft2 v2, Delft3 v3)
      : value1(v1), value2(v2), value3(v3) {}  // constructor

  void printVar() {
    cout << "The Value 1 = " << value1 << endl;
    cout << "The Value 2 = " << value2 << endl;
    cout << "The Value 3 = " << value3 << endl;
  }
};

int main() {
  // object with int, double and char types using the template class
  DemoClassTemplate<int, double> DemoObject1(57, 34.7, 'Delftstack');
  cout << "DemoObject 1 Values: " << endl;
  DemoObject1.printVar();

  // object with int, double and boolean types using the template class
  DemoClassTemplate<double, char, bool> DemoObject2(789.8, 'Delft', true);
  cout << "\nDemoObject 2 values: " << endl;
  DemoObject2.printVar();

  return 0;
}

보시다시피 위의 코드는 기본 매개변수를 포함하는 여러 유형 매개변수로 템플릿 클래스를 만듭니다. 이제 이 템플릿 클래스의 개체를 만들고 원하는 데이터 유형을 사용할 수 있습니다.

출력:

DemoObject 1 Values:
The Value 1 = 57
The Value 2 = 34.7
The Value 3 = k

DemoObject 2 values:
The Value 1 = 789.8
The Value 2 = t
The Value 3 = 1
작가: Sheeraz Gul
Sheeraz Gul avatar Sheeraz Gul avatar

Sheeraz is a Doctorate fellow in Computer Science at Northwestern Polytechnical University, Xian, China. He has 7 years of Software Development experience in AI, Web, Database, and Desktop technologies. He writes tutorials in Java, PHP, Python, GoLang, R, etc., to help beginners learn the field of Computer Science.

LinkedIn Facebook