C++/Templates 2021. 3. 22. 00:00

함수 템플릿 특수화 (Function Templates Specialization)

  • 템플릿이 있는 상태에서, 특정 자료형에 대해 다른 코드를 실행하고 싶을 때 사용한다.

  • explicit instantiation과 비슷한 느낌인데, 이렇게 정의된 함수는 템플릿에서 따로 인스턴스화하지 않는다고 생각하면 될 것 같다.


예제

  #include "MyArray.h"

  using namespace std;

  template<typename T>
  T            getMax(T x, T y)
  {
    return (x > y) ? x : y;
  }

  template<>
  char        getMax(char x, char y)
  {
    cout << "Warning : comparing chars\n";
    return (x > y) ? x : y;
  }

  int            main()
  {
    cout << getMax(1, 2) << endl;
    cout << getMax('a', 'b') << endl;
  }

  /* stdout
  2
  Warning : comparing chars
  b
  */

  • 템플릿 특수화 코드는 보통 헤더에 같이 집어넣는 듯 하다.

    • .cpp 파일로 분리하면 적용하기가 번거롭기 때문이다.
  • 앞에 template<> 키워드는 없어도 작동이 되는데, 템플릿 특수화를 표시하기 위해 쓰는 것 같다.