본문 바로가기
IT/C Language

template 함수

by Jang HyunWoong 2014. 12. 19.


int F(int a) { return a + 6; }

double F(double a) { return a + 6.0; }

 

이 두 함수는 인수의 개수나 자료형, 또는 복귀 값의 자료형만 다를 뿐 함수 본체의 처리 과정이 똑같다. 그런데 이렇게 인수의 자료형만 다를 뿐 인수의 개수도 같고 내부의 처리 과정마저도 동일한 함수를 매번 새로 정의하여 사용한다는 것은 불편한 일이다. 

 

그래서 C++ 에서는 이러한 불편을 줄이기 위해 함수 템플릿(function template)을 제공한다. 

 

사용법 : 

함수 템플릿을 정의할 때는 template라는 키워드를 사용한다. 

template <typename T>

T는 임시 자료형으로 T를 사용하지 않고 temp, a, b, prefix...등 원하는데로 사용해도 되지만 보통 T를사용한다. 

 

  1. #include <iostream>
  2. using namespace std;
  3.  
  4. int F(int x)
  5. {
  6. return x + 6;
  7. }
  8.  
  9. double F(double x)
  10. {
  11. return x + 6.0;
  12. }
  13.  
  14. int main() {
  15. // your code goes here
  16. int y = F(6);
  17. double z = F(6.1);
  18.  
  19. cout << "F(6)의 값은 " << y << endl;
  20. cout << "F(6.1)의 값은 " << z << endl;
  21. return 0;
  22. }

 함수의 다형성을 사용한 예를 바꿔 보겠다. 

  1. #include <iostream>
  2. using namespace std;
  3.  
  4. template <typename T>
  5. T F(T a) { return a+6; }
  6.  
  7. int main() {
  8. // your code goes here
  9. int y = F(6);
  10. double z = F(6.1);
  11.  
  12. cout << "F(6)의 값은 " << y << endl;
  13. cout << "F(6.1)의 값은 " << z << endl;
  14. return 0;
  15. }

훨씬 간편해 진 것을 볼 수 있다. 

 

 

T F(T a) { return a+6; } -> int F(int a) { return a+6; }

 

컴파일러는 위와 같이 해석을 하는데 두 함수는 같은 형태라고 할 수 있다. 

 


반응형

'IT > C Language' 카테고리의 다른 글

참조의 의한 전달2 (call by reference)  (0) 2014.12.19
함수에 자료 전달 방법  (0) 2014.12.19
함수의 다형성(polymorphism) 1  (0) 2014.12.19
C언어에서 알아야 할 것들  (0) 2014.12.19
소수의 합 구하기  (0) 2014.12.19