본문 바로가기

C,C++

함수 템플릿

사용 목적

템플릿을 쓰는 목적은 코드 작성의 무의미한 반복을 피하고 관리를 쉽게 하기 위함인듯 합니다.

예시 코드를 보면 거의 같은 기능을 하는 함수인데도 자료형때문에 비슷한 함수를 두 번 작성하게 됩니다.

하지만 함수 템플릿으로 한번만 작성함으로써 이러한 번거로움을 줄여줍니다.

 

 

방법

기본적으로 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