8. 함수 템플릿의 이해1
by Qerogram※ 함수 템플릿.
- 함수 오버로딩 이용시에 유지보수가 어렵다. 하지만 템플릿을 이용하면 이 모든게 해결이 된다.
- Template 정의.(Generic Programming에 많이 이용된다. 아래의 코드에선, int나 float를 T로 Generic화 했다.)
Template <typename type> function - declarator(정의 부)
- virtual function 마냥, 실행시에 평가하지 않고, 컴파일 시에 문구의 에러가 없다면 해당 함수를 생성한다.(오버로딩)
- 참가로 프로그램의 코드 영역에 만들어진다. => 컴파일 시간이 길어질 수 있고, 파일크기가 커질 수 있다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | #include <iostream> using namespace std; template <typename T> T Max(T a, T b) { return a > b ? a : b; } int main() { int Char1_HP = 300; int Char2_HP = 400; int MaxCharHP = Max(Char1_HP, Char2_HP); cout << "HP 중 가장 큰 값은 " << MaxCharHP << "입니다." << endl; float Char1_Exp = 250.0f; float Char2_Exp = 250.57f; float MaxCharExp = Max(Char1_Exp, Char2_Exp); cout << "경험치 중 가장 큰 값은 " << MaxCharExp << "입니다." << endl; return 0; } | cs |
* 결과
HP 중 가장 큰 값은 400입니다.
경험치 중 가장 큰 값은 250.57입니다.
- 코드 속도를 개선해보려면, Max()내에서 인자 값을 수정하는 일이 없기때문에, const를 붙여주고
참조를 사용한다(구조체나 클래스로 만들어진 크기가 큰 변수를 사용할 때, 참조를 이용하면 확실히 빠르다)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | #include <iostream> using namespace std; template <typename T> const T& Max(const T& a, const T& b) { return a > b ? a : b; } int main() { int Char1_HP = 300; int Char2_HP = 400; int MaxCharHP = Max(Char1_HP, Char2_HP); cout << "HP 중 가장 큰 값은 " << MaxCharHP << "입니다." << endl; float Char1_Exp = 250.0f; float Char2_Exp = 250.57f; float MaxCharExp = Max(Char1_Exp, Char2_Exp); cout << "경험치 중 가장 큰 값은 " << MaxCharExp << "입니다." << endl; return 0; } | cs |
* 만약, 인자의 타입이 서로 다른경우엔 어떻게 될까?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #include <iostream> using namespace std; template <typename T> const T& Max(const T& a, const T& b) { return a > b ? a : b; } int main() { int Char1_MP = 300; double Char1_SP = 400.25; double MaxValue1 = Max( Char1_MP, Char1_SP ); cout << "MP와 SP 중 가장 큰값은" << MaxValue1 << "입니다." << endl << endl; double MaxValue2 = Max( Char1_SP, Char1_MP ); cout << "MP와 SP 중 가장 큰값은" << MaxValue2 << "입니다." << endl << endl; return 0; } | cs |
- 바로 에러가 나온다. 모호하다면서 말이다.
이런경우 typename을 하나 더 달아주면 문제가 해결된다.
* 참고 : Thinking About C++ STL Programming
'코딩 > C&C++' 카테고리의 다른 글
10. 클래스 템플릿의 이해1 (0) | 2017.04.14 |
---|---|
9. 함수 템플릿의 이해2 (0) | 2017.04.13 |
7. Merge sort(합병정렬) (0) | 2017.04.10 |
6. Quick Sort (0) | 2017.04.10 |
5. void PTR (0) | 2017.04.09 |
블로그의 정보
Data+
Qerogram