(C++ : Template) template으로 런타임 포인터 타입 확인하기

Posted by : at

Category : Cpp


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;
}

About Taehyung Kim

안녕하세요? 8년차 현업 C++ 개발자 김태형이라고 합니다. 😁 C/C++을 사랑하며 다양한 사람과의 협업을 즐깁니다. ☕ 꾸준한 자기개발을 미덕이라 생각하며 노력중이며, 제가 얻은 지식을 홈페이지에 정리 중입니다. 좀 더 상세한 제 이력서 혹은 Private 프로젝트 접근 권한을 원하신다면 메일주세요. 😎

Star
Useful Links