함수 템플릿
template<typename T>
T add(T a, T b) { return a + b; }
클래스 템플릿
- 클래스를 찍어내는 모양자
- 템플릿으로 만들어진 클래스를 템플릿 클래스라고 함
- 자료형이 달라서 다중정의 하게 되는 경우에 사용
// T는 자료형이 됨
template<typename T>
class CTest
{
public:
CTest() {}
~CTest() {}
private:
T m_nData;
};
int main() {
CTest<int> a;
return 0;
}
템플릿 특수화
- 특수 경우에 예외적으로 처리하기 위함 ex) 합산에서 자료형이 int, double이 아닌 char*인 경우
- typename을 기술하지 않음
template<typename T>
T add(T a, T b) { return a + b; }
template<>
char* add(char *pszLeft, char *pszRight)
{
...
}
int main() {
int nResult = add<int>(1, 3);
char *pszResult = add<char*>("Hello", "World");
}
template<typename T>
class CTest
{
public:
CTest() {}
~CTest() {}
private:
T m_Data;
};
template<>
class CTest<char*>
{
public:
CTest() {}
~CTest() {}
private:
char* m_Data;
};
int main() {
CTest<int> a;
CTest<char*> b;
return 0;
}
클래스 템플릿 상속
template<typename T>
class CMyDataEx : public CMyData<T>