Notice
Recent Posts
Recent Comments
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
Archives
Today
Total
관리 메뉴

SYDev

C++ Chapter 14-3 : 템플릿 인자 본문

Programming Lang/C++

C++ Chapter 14-3 : 템플릿 인자

시데브 2023. 7. 31. 17:33

템플릿 매개변수에서 변수의 선언

  • 템플릿을 정의할 때 결정되지 않은 자료형을 의미하는 용도로 사용되는 T 또는 T1, T2와 같은 문자를 가키려 '템플릿 매개변수'라 한다.
  • 템플릿 매개변수에 전달되는 자료형 정보를 가리켜 '템플릿 인자'라 한다.

 이를 이용한 예제를 살펴보자.

#include <iostream>
using namespace std;

template <class T, int len>
class SimpleArray
{
private:
    T arr[len];
public:
    T& operator[] (int idx) { return arr[idx]; }
    SimpleArray<T, len>& operator=(const SimpleArray<T, len>& ref)
    {
        for(int i=0; i<len; i++)
            arr[i]=ref.arr[i];
        return *this;
    }
};

int main(void)
{
    SimpleArray<int, 5> i5arr1;
    for(int i=0; i<5; i++)
        i5arr1[i]=i*10;

    SimpleArray<int, 5> i5arr2;
    i5arr2=i5arr1;	//둘 다 type이 SimpleArray<int, 5>이기 때문에 대입연산 가능
    for(int i=0; i<5; i++)
        cout<<i5arr2[i]<<", ";
    cout<<endl;

    SimpleArray<int, 7> i7arr1;
    for(int i=0; i<7; i++)
        i7arr1[i]=i*10;

    SimpleArray<int, 7> i7arr2;
    i7arr2=i7arr1;	//둘 다 type이 SimpleArray<int, 7>이기 때문에 대입연산 가능
    for(int i=0; i<7; i++)
        cout<<i7arr2[i]<<", ";
    cout<<endl;

    return 0;
}
0, 10, 20, 30, 40, 
0, 10, 20, 30, 40, 50, 60,

 위 예제처럼 배열의 길이를 템플릿 매개변수를 이용해 받으면, SimpleArray<int, 5>와 SimpleArray<int, 7>은 서로 다른 타입이기 때문에 다음의 대입문이 성립되지 않는다.

int main(void)
{
    SimpleArray<int, 5> i5arr1;
    SimpleArray<int, 7> i7arr1;
    i5arr1 = i7arr1;    //compile error
    . . . . 
}

 

템플릿 매개변수의 디폴트 값 지정

  • 템플릿 매개변수는 디폴트 값의 지정도 가능하다.

 이와 관련된 다음 예제를 살펴보자.

#include <iostream>
using namespace std;

template <typename T=int, int len=7>    //Default Value 지정
class SimpleArray
{
private:
    T arr[len];
public:
    T& operator[] (int idx) { return arr[idx]; }
    SimpleArray<T, len>& operator=(const SimpleArray<T, len>&ref)
    {
        for(int i=0; i<len; i++)
            arr[i]=ref.arr[i];
        return *this;
    }
};

int main(void)
{
    SimpleArray<> arr;
    for(int i=0; i<7; i++)
        arr[i]=i+1;
    for(int i=0; i<7; i++)
        cout<<arr[i]<<" ";
    cout<<endl;

    return 0;
}
1 2 3 4 5 6 7

 


참고자료

  • 윤성우, <윤성우의 열혈 C++ 프로그래밍>, 오렌지미디어, 2010.05.12