C++ Chapter 13.7 : 포인터에 대한 템플릿 특수화

Date:     Updated:

카테고리:

태그:

인프런에 있는 홍정모 교수님의 홍정모의 따라 하며 배우는 C++ 강의를 듣고 정리한 필기입니다. 😀
🌜 [홍정모의 따라 하며 배우는 C++]강의 들으러 가기!


chapter 13. 템플릿 : 포인터에 대한 템플릿 특수화

특수화 : 템플릿에서 특정 타입에 대해서 다른 실행 처리를 하고 싶을 때 그 타입에 대해서만 특수화.

🔔 포인터에 대한 템플릿 특수화 X


#include <iostream>

using namespace std;

template<typename T>
class A
{
private:
    T m_value;
public:
    A(const T & input)
        : m_value(input)
    {}
  
    void print()
    {
        cout << m_value << endl;
    }
};

int main()
{
    A<int> a_int(123);
    a_int.print();
    
    int temp = 456;
    
    A<int*> a_int_ptr(&temp);
    a_int_ptr.print();
    
    double temp_d = 3.141592;
    A<double*> a_double_ptr(&temp_d);
    a_double_ptr.print();
}
💎출력💎

123
0117FD68
0117FD4C
  • A<int*>, A<double*> 👉 포인터 데이터 타입에 대한 구체화
    • 0117FD68 이런식으로 주소값 그대로를 출력하는데 포인터로 구체화 됐을 때는 특수하게 간접 참조 값을 출력하게 하고 싶을 때


🔔 모든 포인터 타입에 대한 ‘특수화’

포인터 타입들로 구체화 됐을 때만 다르게 동작하도록 특수화 하자!

// 템플릿 👈👈👈
template<typename T>
class A
{
private:
    T m_value;
public:
    A(const T & input)
        : m_value(input)
    {}
  
    void print()
    {
        cout << m_value << endl;
    }
};

// 포인터 타입에 대해서만 특수화 👈👈👈
template<typename T>
class A<T*>
{
private:
    T* m_value;
public:
    A(T * input)
        : m_value(input)
    {}
  
    void print()
    {
        cout << *m_value << endl;
    }
};

int main()
{
    A<int> a_int(123);
    a_int.print();
    
    int temp = 456;
    
    A<int*> a_int_ptr(&temp);
    a_int_ptr.print();
    
    double temp_d = 3.141592;
    A<double*> a_double_ptr(&temp_d);
    a_double_ptr.print();
}
💎출력💎

123
456
3.145192
  • T*
    • int*, float*, char* 등등 모든 포인터 타입에 대한 특수화
    • 따라서 T를 생략하면 안되기 때문에 template<>가 아닌 원래대로 template<typename T>까지 명시해주어야 한다.
  • 포인터값 즉 주소가 아닌 그 주소가 참조하는 간접참조 값이 출력되는 것을 알 수 있다. 포인터 타입에 대한 특수화를 했기 때문에!


🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우 
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄

맨 위로 이동하기

Cpp 카테고리 내 다른 글 보러가기

댓글 남기기