#include <iostream>
template <class Any>
void Swap(Any &a, Any &b);
struct job
{
char name[40];
double salary;
int floor;
};
template <>void Swap<job>(job &j1, job &j2);
void Show(job &j);
int main()
{
using namespace std;
cout.precision(2); // ()안에 있는 숫자에 맞게 길이를 출력한다는 뜻
cout.setf(ios::fixed, ios::floatfield);
int i = 10, j = 20;
cout<<"i,j = "<<i<<","<<j<<".\n";
cout<<"컴파일러가 생성한 int형 교환기를 사용하면\n";
Swap(i,j);
cout<<"이제 i,j = "<<i<<","<<j<<".\n";
job sue = {"Susan Yaffee",73000.60,7};
job sidney = {"Sidney Taffee",78060.72, 9};
cout<<"job 교환전:\n";
Show(sue);
Show(sidney);
Swap(sue,sidney);
cout<<"job 교환후:\n";
Show(sue);
Show(sidney);
return 0;
}
template <typename Any>
void Swap(Any &a,Any &b)
{
Any temp;
temp = a;
a = b;
b = temp;
}
template <>void Swap<job>(job &j1, job &j2)
{
double t1;
int t2;
t1 = j1.salary;
j1.salary = j2.salary;
j2.salary = t1;
t2 = j1.floor;
j1.floor = j2.floor;
j2.floor = t2;
}
void Show(job &j)
{
using namespace std;
cout<<j.name<<": ("<<j.floor<<"층에 거주)"
<<"$"<<j.salary<<endl;
}
이소스는 구도체(C++에서는 구도체도 클래스이다)에서 특정 멤버 변수만 교체를 할때 명시적 특수화
템플릿을 통해서 Swap 이 가능하다
여기서 template <>void Swap(job &j1, job &j2);
이렇게 Swap다음에 <job>을 생략할수 있다 그이유는 인자값을 넘겨줄때 컴파일러가 미리 무슨형인지
알기 때문에 생략이 가능하다
이소스는 구도체(C++에서는 구도체도 클래스이다)에서 특정 멤버 변수만 교체를 할때 명시적 특수화
템플릿을 통해서 Swap 이 가능하다
여기서 template <>void Swap(job &j1, job &j2);
이렇게 Swap다음에 <job>을 생략할수 있다 그이유는 인자값을 넘겨줄때 컴파일러가 미리 무슨형인지
알기 때문에 생략이 가능하다
'Soft Ware > C++ 언어!!' 카테고리의 다른 글
함수 오버로딩 때 순서 (0) | 2011.10.22 |
---|---|
템플릿의 구체화 및 특수화 (0) | 2011.10.22 |
Template 을 이용한 Swap (0) | 2011.10.22 |
확률 계산 시 부동소수점 오버플로 (0) | 2011.10.21 |
cout 의 입력큐 초기화 (0) | 2011.10.20 |