[C++] 함수 템플릿

KWANHO PARK·2025년 4월 18일

CPP

목록 보기
15/24
/*
	함수템플릿 : 여러 자료형을 템플릿 인자로 받아 함수 내부에서 활용
*/
#include <iostream>

//int Add(int a, int b) {
//	return a + b;
//}
//double Add(double a, double b) {	// overloading
//	return a + b;
//}
template <typename T>
T Add(T a, T b) {
	return a + b;
}
int main()
{
	std::cout << Add(10, 20) << std::endl;
	std::cout << Add(1.1, 2.2) << std::endl;	// 3
	return 0;
}

/*
	템플릿은 선언과 함수정의가 분리될 수 없음
*/
#include <iostream>

template <typename T>	// 템플릿 선언(일반화)
T func(T a, T b) {		// 템플릿 함수
	std::cout << "type: T" << std::endl;
	return a + b;
}

template <>				// 템플릿 특수화 - 템플릿 일반화 중 특정 타입을 처리할 경우
int func<int>(int a, int b) {
	std::cout << "type: <int>" << std::endl;
	return a + b;
}

int main()
{
	std::cout << func(10, 20) << std::endl;
	std::cout << func(10.5, 20.5) << std::endl;

	std::cout << func<double>(10.1, 20.2) << std::endl;
	std::cout << func<int>(100, 10) << std::endl;

	return 0;
}

/*
	템플릿의 typename이 여러 개인 경우
*/
#include <iostream>
using namespace std;

template <typename T, typename T2>
void func(T a, T2 b) {
	cout << a << endl;
	cout << b << endl;
}
int main()
{
	func(10, 3.14);
	func("Template", 3.14);
	func<const char*, double>("Hello", 3.141592);

	return 0;
}

0개의 댓글