template<typename T> void printv(T v)
{
// 이걸 하고 싶다
// if(T is Pointer)
// cout 메모리 주소
cout << v << endl;
}
int main()
{
int n = 3;
double d = 3.4;
printv(n);
printv(d);
printv(&n);
}
template<typename T> void foo(T v)
{
if(?) // 여기 뭘 넣어야 할까?
cout << "pointer" << endl;
else
cout << "not pointer" << endl;
}
int main()
{
int n = 3;
foo(n);
foo(&n);
}
template<typename T> struct xis_pointer
{
enum { value = false };
};
// 포인터 타입에 대해서 부분 특수화
template<typename T> struct xis_pointer<T*>
{
enum { value = true };
};
template<typename T> void foo(T v)
{
if(xis_pointer<T>::value) // 함수처럼 보이고 컴파일 시간에 돌아간다고 해서 메타 함수라 한다.
cout << "pointer" << endl;
else
cout << "not pointer" << endl;
}