함수 템플릿

  • 함수를 찍어내는 모양자
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>

'💻 Computer Science > C & C++' 카테고리의 다른 글

[C++] 클래스  (0) 2024.06.25
[C++] 스마트 포인터  (0) 2024.06.04
[C++] 관계  (0) 2024.06.04
[C++] 상속  (0) 2024.06.02
[C++] 연산자 다중 정의  (0) 2024.04.15