이것을 쓰는 이유는 앞에서 배웠던 다형성과 이어지는 것 같다. 우리는 함수 오버로딩을 통해서 다른 변수형을 받는 동일한 이름을 가진 함수들을 정의 했다.
void swapValues(int& var1, int& var2)
{
int temp;
temp = var1;
var1 = var2;
var2 = temp;
}
void swapValues(char& var1, char& var2)
{
char temp;
temp = var1;
var1 = var2;
var2 = temp;
}
이런 식으로 말이다. 하지만 템플릿을 사용하면 그럴 필요가 없다.
template <typename T>
void swapValues(T& var1, T& var2)
{
T temp;
temp = var1;
var1 = var2;
var2 = temp;
}
이런식으로 사용하게 되면 템플릿에서 타입이름을 알아서 지정해준다. 동적인 타이핑이 가능해지는 것이다. 파이썬에서 어떤 식으로 동적인 타이핑이 가능해지는지 알 수 있게 되었다!
여러개 써도 된다! 다음과 같이 쓴다.
template<typename T1, typename T2>
아니면 클래스 안에서도 사용 가능하다. 정말 활용 범위가 넓은 것 같다. 하지만 그 만큼 주의 해야 할 점이 많을 것이다. 타입이 같아야 하는 상황인데 다른 타입을 쓰는 상황이 생기면 오류가 날 것 같다.
template<typename T>
class Pair
{
public:
Pair();
Pair(T firstVal, T secondVal);
void setFirst(T newVal);
void setSecond(T newVal);
T getFirst() const;
T getSecond() const;
private:
T first; T second;
};
template<typename T>
Pair<T>::Pair(T firstVal, T secondVal)
{
first = firstVal;
second = secondVal;
}
template<typename T>
void Pair<T>::setFirst(T newVal)
{
first = newVal;
}
이렇게 클래스를 만들면 사용을 해야겠다. 사용은 다음과 같이 한다.
Pair<int> score;
Pair<char> seats;
score.setFirst(3);
score.setSecond(0);
Class name before :: is "Pair <타입>"
But constructor name is just "Pair"
Destructor name is also just "~Pair"