STL - 3 (함수 템플릿)

Youngmin Choi·2021년 6월 14일
0

STL

목록 보기
3/34
post-thumbnail

Q. '함수 템플릿2'에서 Max함수 템플릿에 개선점은 없을까?

정답은 'const'를 사용하여 내부에서 변경하는 것을 막고, Max 함수를 사용하는 사람에게 알리는 역할을 한다.

위 Code1에서 typename과 Code2에서의 class는 다를바가 없다.
C++ 표준화 전후에 만들어진 컴파일러에서는 class를 사용해야 한다.
현재 컴파일러는 둘 다 지원하며, 오래된 C++컴파일에서 하는 것이 아니라면 'typename'을 사용하자!


Q. 이제 Max 함수 템플릿에는 문제가 없을까?

위 Code3를 컴파일 하면 아래와 같은 에러가 출력된다.

위와 같은 오류가 나는 이유는
컴파일러는 사람이 아니어서 서로 다른 타입의 인자가 들어오면 템플릿의 파라미터 T를 사용한 함수의 인자 a와 b의 타입을 int로 해야 할지, double로 해야 할지 판단할 수 없기 때문이다.

그렇다면 해결방안은 무엇일까??
정답은 typename을 하나가 아닌 복수 개 사용하면 된다!

그런데..

결과 값이첫 줄 실행결과가 400으로 나왔다. 오류가 있다.. 왜일까?

300과 400.25를 비교하면 400.25가 나오는게 맞다!
하지만 400이 나온 이유는 함수 템플릿의 반환 값으로 T1을 선언했기 때문에
(_T1& Max(int T1&, double T2&) 순서대로 함수 인자에 사용하면, 반환 값의 타입이 int로 되어 버린다.) 서로 다른 타입을 사용하는 경우에는 반환 값을 아주 조심해야 한다..!

profile
Always, Continually, In all circumstance

0개의 댓글