티스토리 뷰

프로그래밍/C++

함수 템플릿 template

에어버스 2017. 6. 13. 16:47

템플릿 template
(http://oyang-life.tistory.com/6)

 

1. 함수 테플릿
2. 클래스 템플릿 (참조 : 함수 템플릿 참조: http://petra.tistory.com/1096)

1. 함수 템플릿

int MyAddFunc(int a, int b)
{
return a + b;
}

double MyAddFunc(double a, double b)
{
return a + b;
}

이처럼 덧셈을 하는 경우 자료형에 따라 각 함수를 만들어야 했다.

template <typename T>
T MyAddFunc(T a, T b)
{
return a + b;
}

int _a = 1, _b = 2, _c;
c = MyAddFunc(_a, _b); // int형으로 덧셈

double _d = 1.0, _e = 2.0, f;
f = MyAddFunc(_d, _e); // double형으로 덧셈

함수 템플릿을 만들면 함수 인자의 자료형에 따라 적용된다. 자료형이 여러개여도 한번만 만들면 모든 자료형에 적용 가능하다.

==================

template <typename T1, typename T2>
void showFunc(T1 a, T2 b) // T1과 T2의 자료형은 같을 수도 있고, 다를 수도 있다.
{
cout << a << endl;
cout << b << endl;
}

===================

자료형의 크기를 리턴하는 템플릿 함수를 만들면

template <typename T>
int GetSize(T a)
{
return sizeof(a);
}

이렇게 만든다. 그런데 포인터인 경우 포인터 크기가 아닌 포인터에 할당된 데이터 크기를 리턴해줘야 하므로 함수 템플릿의 특수화가 필요하다.

template <> // 함수 템플릿의 특수화
int GetSize(char* a)
{
return strlen(a);
}

인수가 문자형 포인터를 갖는 GetSize()는 이 함수를 호출하고, 그외 인수들은 위 함수를 호출한다.

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/06   »
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 29
30