공부 중 메모/수업 예제 (KGCA)

Cpp 함수 템플릿 예제

라이피 (Lypi) 2018. 7. 16. 18:54
반응형

출처 : KGCA 게임 아카데미(http://www.kgcaschool.com/). 수업 예제 파일.


FunctionTemplates.h

 #pragma once
#include <iostream>
#include <string>
#include <string.h>

//기본적인 함수 템플릿
template <typename T>
T add(T x, T y)
{
	T result = x + y;

	return result;
}
//함수 템플릿의 특수화 
template <>
char* add(char* x, char* y)
{
	char* result = new char[255]{ 0, };
	strcat_s(result,100, x);
	strcat_s(result,100, y);

	return result;
}

//함수 템플릿을 특수화한 것
template <>
double add(double x, double y)
{
	std::cout << "특수화한 함수" << std::endl;
	double result = x + y;
	return result;
}

//add 함수를 오버로딩 한 것
//오버로딩 한 함수가 우선시된다. 즉 함수 템플릿은 특수화가 아닌 오버로딩으로 처리할 수 있다.
double add(double x, double y) 
{
	std::cout << "오버로딩한 함수" << std::endl;
	double result = x + y;
	return result;
}

//레퍼런스를 인자로 받는 템플릿
template <typename T>
void Swap(T& x, T& y)
{
	T temp = x;
	x = y;
	y = temp;
}

main.cpp

 #include "FunctionTemplates.h"

int main()
{
	int x = 10;
	int y = 20;
	std::cout << x << ", " << y << std::endl;
	Swap(x, y); //int를 인자로 받는 swap함수가 호출됨
	std::cout << x << ", " << y << std::endl;
	std::cout << add(x, y) << std::endl;

	double a = 10.1;
	double b = 20.2;
	std::cout << a << ", " << b << std::endl;
	Swap(a, b); //double을 인자로 받는 Swap함수가 호출됨
	std::cout << a << ", " << b << std::endl;
	std::cout << add(a, b) << std::endl;

	char c1[5] = "asdf";
	char c2[5] = "qwer";
	std::cout << add(c1, c2) << std::endl;

	std::string s1 = "abc";
	std::string s2 = "def";
	std::cout << s1 << ", " << s2 << std::endl;
	Swap(s1, s2); //string을 인자로 받는 Swap함수가 호출됨
	std::cout << s1 << ", " << s2 << std::endl;
	std::cout << add(s1, s2) << std::endl;


}


반응형