사용 목적
템플릿을 쓰는 목적은 코드 작성의 무의미한 반복을 피하고 관리를 쉽게 하기 위함인듯 합니다.
예시 코드를 보면 거의 같은 기능을 하는 함수인데도 자료형때문에 비슷한 함수를 두 번 작성하게 됩니다.
하지만 함수 템플릿으로 한번만 작성함으로써 이러한 번거로움을 줄여줍니다.
방법
기본적으로 template<class 변수명>이 됩니다. 예시 코드에는 T라고 작성이 되었지만, T가 아니더라도 상관없습니다.
본인이 작성한 변수이름으로 정의부분의 T도 똑같이 바꿔주시면 됩니다.
<주의>
함수 템플릿에서 class,typename을 쓸때는 정의랑 선언과 함께!
단순 int 이런걸로 받을땐 인자취급받으므로 선언,정의 따로 써도됩니다.
예시 코드
#include <iostream>
#include <string>
int damage_sum_int(int damage_in, int damage_count)
{
int sum = 0;
for (int i = 0; i < damage_count; ++i)
{
sum += damage_in;
}
return sum;
}
float damage_sum_float(float damage_in, int damage_count)
{
float sum = 0;
for (int i = 0; i < damage_count; ++i)
{
sum += damage_in;
}
return sum;
}
template<class T>
T damage_sum(T damage_in, int damage_count)
{
T sum = 0;
for (int i = 0; i < damage_count; ++i)
{
sum += damage_in;
}
return sum;
}
int main()
{
// 일반 함수로 작성했을 때
std::cout << " int형 대미지인 경우 : " << damage_sum_int(8, 2) << " 입니다." << std::endl;
std::cout << " float형 대미지인 경우 : " << damage_sum_float(4.25f, 6) << " 입니다. " << std::endl;
// 함수 템플릿으로 작성했을 때
std::cout << " int형 대미지인 경우 : " << damage_sum(8, 2) << " 입니다." << std::endl;
std::cout << " float형 대미지인 경우 : " << damage_sum(4.25f, 6) << " 입니다. " << std::endl;
return 0;
}
'C,C++' 카테고리의 다른 글
공부하면서 빠트린 것들 끄적끄적 - 얕은 복사 vs 깊은 복사 (0) | 2023.09.25 |
---|---|
함수 객체 (0) | 2022.11.03 |
함수 포인터 (0) | 2022.11.02 |
클래스 템플릿 (0) | 2022.11.01 |