C++ Chapter 13.7 : 포인터에 대한 템플릿 특수화
카테고리: Cpp
태그: Cpp Programming
인프런에 있는 홍정모 교수님의 홍정모의 따라 하며 배우는 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>
까지 명시해주어야 한다.
- 포인터값 즉 주소가 아닌 그 주소가 참조하는 간접참조 값이 출력되는 것을 알 수 있다. 포인터 타입에 대한 특수화를 했기 때문에!
🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄
댓글 남기기