만약 sum이라는 함수(두 변수를 더하는 )를 만든다고 치자~
하지만 더할수 있는 자료형은 int 뿐만 아니라 int float double string 등등 이라고 한다면
가장 쉽게 떠올릴수 있는것이 바로 함수오버로딩이다.
explicit int sum(int a, int b)
{
}
explicit float sum(float a, float b)
{
}
explicit double sum(double a, double b)
{
}
* explicit 키워드는 암시적인 형변환을 막아준다. ex) int a = 3.5f; // 암시적으로 3으로 짤려서 들어감.
- 암시적? 암묵적?? 용어의 차이는 따지지 않는걸로~
하지만 이렇게 되면 중복된 코드도 많이 양산하고 자료형 마다 다 해줘야하는 번거로움도 있다.
이럴때 함수템플릿로 만들어 쓰면 참으로 좋다.
예로써 보는게 제일 이해하기 쉽다.
ex)
template<typename T>
T sum(T a, T b)
{
T temp;
temp = a + b;
return temp;
}
★ 하지만 아래같은 경우라면 위의 함수템플릿도 속수무책으로 당할수 밖에 없다..
struct point
{
int x, int y;
};
sum함수에 point 변수가 들어온다면 어떻게 될까? 물론 안됨...
이럴경우를 대비해 함수 템플릿 특수화라는것이 있다.
ex)
template<>
point sum<point>(point a, point b)
{
point temp;
temp.x = a.x + b.x;
temp.y = a.y + b.y;
return temp;
}
'개발언어 > c++' 카테고리의 다른 글
웹에서 다운로드 (0) | 2016.06.13 |
---|---|
클래스 템플릿 (0) | 2016.06.13 |
스레드 종료시점 알기 (0) | 2016.06.12 |
RaiseException,예외이벤트 발생 (0) | 2016.06.12 |
RaiseException,예외이벤트 발생 (0) | 2016.06.12 |