9. 함수 템플릿의 이해2
by Qerogram* 함수 템플릿에서는 전문화라는 개념이 존재한다.
먼저 값이 맞는 게 있다면, 전문화된 Method를 부르기 마련이다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | #include <iostream> using namespace std; template <typename T1, typename T2> const T1& Max(const T1& a, const T2& b) { cout << "template 호출" << endl; return a > b ? a : b; } template <> const double& Max(const double& a, const double& b) { cout << "전문화 호출" << endl; return a > b ? a : b; } int main() { double Char1_MP = 300; double Char1_SP = 400.25; double MaxValue1 = Max(Char1_MP, Char1_SP); int Char2_MP = 300; double Char2_SP = 400.25; double MaxValue2 = Max(Char2_MP, Char2_SP); return 0; } | cs |
* 결과
전문화 호출
template 호출
- 한번 더 실험을 해보았다.
Max(10.1, 20.4)를 호출한다면 Max(T, T)가 호출이 될까? Max(double, double)이 호출이 될까?
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 T1, typename T2> const T1& Max(const T1& a, const T2& b) { cout << "template 호출" << endl; return a > b ? a : b; } template <> const double& Max(const double& a, const double& b) { cout << "전문화 호출" << endl; return a > b ? a : b; } int main() { cout << Max(10.1, 20.4) << endl; return 0; } | cs |
* 결과
전문화 호출
20.4
- 생각한 대로, 전문화된 Method를 호출하였다. 이유는, 호출 순서에 규칙이 존재한다.
1순위. 전문화된 Method
2순위. 템플릿 Method
3순위. 일반 Method.
* Non-type 함수 템플릿.
- 게임에서 돈, HP, 경험치를 이벤트시에 더 주는 걸 예시로 해보겠다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | #include <iostream> using namespace std; template <typename T, int VAL> T AddValue(T const& CurValue) { return CurValue + VAL; } const int EVENT_ADD_HP_VALUE = 50; const int EVENT_ADD_EXP_VALUE = 30; const int EVENT_ADD_MONEY_VALUE = 10000; int main() { int Char_HP = 250; cout << Char_HP <<"에서 이벤트에 의해 " << AddValue<int, EVENT_ADD_HP_VALUE>(Char_HP) << endl; float Char_Exp = 378.89f; cout << Char_Exp << "에서 이벤트에 의해 " << AddValue<int, EVENT_ADD_EXP_VALUE>(Char_Exp) << endl; int Char_MONEY = 34567890; cout << Char_MONEY << "에서 이벤트에 의해 " << AddValue<int, EVENT_ADD_MONEY_VALUE>(Char_MONEY) << endl; return 0; } | cs |
* 결과
250에서 이벤트에 의해 300
378.89에서 이벤트에 의해 408
34567890에서 이벤트에 의해 34577890
* 참고 - Thinking About C++ STL Programming
'코딩 > C&C++' 카테고리의 다른 글
11. 클래스 템플릿의 이해2 (0) | 2017.04.15 |
---|---|
10. 클래스 템플릿의 이해1 (0) | 2017.04.14 |
8. 함수 템플릿의 이해1 (0) | 2017.04.13 |
7. Merge sort(합병정렬) (0) | 2017.04.10 |
6. Quick Sort (0) | 2017.04.10 |
블로그의 정보
Data+
Qerogram