다음을 통해 공유


클래스 템플릿의 기본 인수

클래스 템플릿은 형식 또는 값 매개 변수의 기본 인수를 포함할 수 있습니다. 등호(=)와 형식 이름 또는 값을 차례로 포함하여 기본 인수를 지정합니다. 템플릿 인수가 여러 개인 경우 첫 번째 기본 인수 다음의 모든 인수에는 기본 인수가 있어야 합니다. 기본 인수를 사용하여 템플릿 클래스 개체를 선언할 때 기본 인수를 허용하려면 인수를 생략합니다. 기본값이 아닌 인수가 있으면 빈 꺾쇠 괄호를 생략하지 마십시오.

템플릿을 여러 번 선언하는 경우 기본 인수를 두 번 이상 지정할 수는 없습니다. 다음 코드는 오류를 보여 줍니다.

template <class T = long> class A;
template <class T = long> class A { /* . . . */ }; // Generates C4348.

예제

다음 예제에서는 크기를 지정하는 템플릿 매개 변수에 대한 기본값과 배열 요소에 대한 기본 형식 int를 사용하여 배열 클래스 템플릿을 정의합니다.

// template_default_arg.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;

template <class T = int, int size = 10> class Array
{
   T* array;
public:
   Array()
   {
      array = new T[size];
      memset(array, 0, size * sizeof(T));
   }
   T& operator[](int i)
   {
      return *(array + i);
   }
   const int Length() { return size; }
   void print()
   {
      for (int i = 0; i < size; i++)
      {
         cout << (*this)[i] << " ";
      }
      cout << endl;
   }
};

int main()
{
   // Explicitly specify the template arguments:
   Array<char, 26> ac;
   for (int i = 0; i < ac.Length(); i++)
   {
      ac[i] = 'A' + i;
   }
   ac.print();
   
   // Accept the default template arguments:
   Array<> a; // You must include the angle brackets.
   for (int i = 0; i < a.Length(); i++)
   {
      a[i] = i*10;
   }
   a.print();
}
  

참고 항목

참조

기본 인수