[c++] Templates

jung0228·2022년 5월 20일
1

대학수업

목록 보기
15/32

Templates

이것을 쓰는 이유는 앞에서 배웠던 다형성과 이어지는 것 같다. 우리는 함수 오버로딩을 통해서 다른 변수형을 받는 동일한 이름을 가진 함수들을 정의 했다.

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;
}

이런식으로 사용하게 되면 템플릿에서 타입이름을 알아서 지정해준다. 동적인 타이핑이 가능해지는 것이다. 파이썬에서 어떤 식으로 동적인 타이핑이 가능해지는지 알 수 있게 되었다!

Multiple Type Parameters

여러개 써도 된다! 다음과 같이 쓴다.

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"

profile
안알랴줌

0개의 댓글