template함수

C & C++ 관련 : 2007. 3. 14. 13:37
반응형

#include
template void swap(x &a, x &b) {
x temp ;

temp=a;
a=b;
b=temp;
}
main() {
int i=10, j=20 ;
float c=10.1, d=23.3 ;//에러발생...

cout << i << ' ' << j << '\n';
cout << c << ' ' << d << '\n';

swap(i,j);
swap(c,d);

cout << i << ' ' << j << '\n';
cout << c << ' ' << d << '\n';

return 0;
}

템플릿함수 공부하면서 제일 기본적인 예제를 코딩했는데요.....
에러가 발생하는군요...책이랑 똑같은데.....
변수형 float를 double형으로 바꾸면 에러가 잡히던데요...
흠 잘 모르겠네요... 템플릿 함수의 의미를..... 설명 부탁드립니다..


----------------------------------------------------------------------------------------


위의 예제를 비주얼 스튜디오에서 돌려보니 워닝만 잡히고 실행은 똑같이 잘 됩니다.

D:\프로그램\a\a.cpp(18) : warning C4305: 'initializing' : truncation from 'const double' to 'float'

이런 경고가 뜨는데, 보통 부동소수점 표현에 double 형을 기본으로 쓰기 때문에
float로 해두면 값이 짤릴수 있다는 경고 메시지 입니다.

에러가 뜬다고 했는데, 에러가 아니고 경고가 아닌가요?
a.exe - 0 error(s), 2 warning(s)
경고 메시지는 무시할수도 있지만 제대로 할려면 이것도 잡아주는게 좋죠.

템플릿의 문제는 아닌것 같군요.

참고로 템플릿은 말그대로 틀입니다.
타입 형을 동적으로 할당할수가 있죠.
func(int)
func(double)
func(float)
func(char)
이런 함수를 만들어야한다면 일일이 다 만들수 없겠죠
그래서 템플릿을 이용해서 필요한 함수를 맞게 사용할수 있죠.



----------------------------------------------------------------------------------------


그것은 형변환을 해주면 해결되는 문제입니다.

먼저 template 키워드뒤에 생략된것이 있습니다.

그것을 추가해야합니다. 물론 네이버 버그상의 문제로 안찍힌 듯싶은데요.

하여튼 그렇구요

다음은 테스트후 올린 것입니다.


#include < iostream > //구형인 경우 iostream.h
using namespace std;  //구형인 경우 생략함


template < class x >
void swap_t(x &a, x &b)
{
 x temp;
 temp=a;
 a=b;

 b=temp;
}


int main()
{
 int i = 10;
 int j = 20;
 float c = (float)10.1; //캐스팅(형변환)해서 오류발생제거
 float d = (float)23.3; //상동


 cout << i << ' ' << j << '\n';
 cout << c << ' ' << d << '\n';


 swap_t(i,j);
 swap_t(c,d);


 cout << i << ' ' << j << '\n';
 cout << c << ' ' << d << '\n';

 return 0;
}

반응형
Posted by Real_G