#include <iostream>
using namespace std;
template<class T>
class A
{
private:
T m_value;
public:
A(const T & input)
: m_value(input)
{}
void print()
{
cout << m_value << "\n";
}
};
//포인터의 경우에만 특수화
template<class T>
class A<T*>
{
private:
T* m_value;
public:
A(T * input)
: m_value(input)
{}
void print()
{
cout << *m_value << "\n";
}
};
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();
return 0;
}