반응형
출처 : 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; }
반응형