336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
C++ 템플릿 기술중 부분전문화에 대한 내용을 다루려고 합니다. 좀 생소한 용어이긴 한데 템플릿을 사용하면서 중요한 부분중 하나라서 차근차근 포스팅 해보려고 하네요 먼저 아래 코드를 살펴 보면, class라는 Stack을 template으로 구현을 하고 있습니다. Main 함수를 보게되면 T값으로 int, int*, char* 타입으로 결정을 하고 push를 하고 있습니다. 근데 여기서 push 함수내 알고리즘을 포인터 타입에서는 다르게 적용하고 싶어집니다. 이때 부분 전문화를 사용하여 알고리즘을 다르게 적용을 할수 있습니다. Stack에 대한 template을 새로 생성 합니다. 이 template에서는 모든 포인터에 대한 타입을 기술하고 싶은거죠 이때 class 이름 뒤에 라고 명시를 해주게 되면 컴파일러에 의해서 해당 template type으로 class를 생성하게 됩니다. 이를 부분 전문화라고 합니다. 아래 코드는 char* 타입에 대한 전문화 template이 추가된 코드이다. 특정 타입에 대해서 전문화를 위해 사용된다.
#include 
using namespace std;

// Primary Template : 가장 기본이 되는 template
template class Stack
{
    T buff[10];
public:
    void push(const T& a) { cout << "T" << endl; }
};

// T가 포인터 인경우에는 class 이름 뒤에  를 추가한다. : 모든 포인터
// partial specialization(부분 전문화, 부분 특화)
template class Stack
{
    T buff[10];
public:
    void push(const T& a) { cout << "T*" << endl; }
};

// 만약에 char* 인경우에도 마찬가지로  추가 한다. 그리고 더이상 typename T가 필요하지 않는다.
// specialization(전문화, 특화) : 특정 타입으로 확정
template<> class Stack
{
    char* buff[10];
public:
    void push(const char* a) { cout << "char*" << endl; }
};

int main()
{
    Stack s1; s1.push(0);   // T  출력 (Primary Template 호출)
    Stack s2; s2.push(0);  // T* 출력 (partial specialization 호출)
    Stack s3; s3.push(0); // char* 출력 (specialization 호출)
}
블로그 이미지

뚱땡이 우주인

,