본문 바로가기

카테고리 없음

템플릿 함수의 고급활용 (특수화)

템플릿 함수의 특수화와 특수화 삭제

템플릿 함수의 특수화

template <typename T>
void Print(T value) {
    std::cout << "Generic template: " << value << std::endl;
}

template <>
void Print<std::string>(std::string value) {
    std::cout << "Template specialization for std::string: " << value << std::endl;
}

int main() {
    Print<int>(5);  // Generic template: 5
    Print<std::string>("Hello");  // Template specialization for std::string: Hello
    return 0;
}

위 예제는 템플릿 함수의 특수화 예제입니다.

Print 라는 템플릿 함수를 만들었습니다.

Print 함수는 템플릿함수의 성질을 모두 가지고 있습니다. 자료형에 구애받지 않고, 인수의 자료형에 따라서 

동일한 동작을 수행하게 됩니다. string 자료형일 때만 빼고요.

 

 

특수화 삭제

#include <iostream>

// 템플릿 함수 선언
template <typename T>
void print(T value)
{
    std::cout << value << std::endl;
}

// 템플릿 함수의 특수화 삭제
template <>
void print<int>(int value) = delete;

template <>
void print<double>(double value) = delete;

int main()
{
    print<char>('A'); // 'A' 출력

    // 다음 라인들은 컴파일 에러를 발생시킵니다.
    // print(123);
    // print(3.14);
}