(C++ : Template) 함수 매개변수 타입 구하기

Posted by : at

Category : Cpp


double hoo(short a, int b) { return 0; }

template<size_t N, typename T> struct argument_type
{
  typedef T type;
};

template<typename R, typename A1, typename ...Types>    // 가변인자를 처리
struct argument_type<0, R(A1, Types...)>
{
  typedef A1 type;
};

template<typename T> void foo(const T& t)
{
  // T : double(short, int)
  typename argument_type<0, t>::type ret;
  // argument_type<0, t> -> 0이 아니라 다른 건 못오나?
  
  cout << typeid(ret).name() << endl;
}

int main()
{
  foo(hoo);
}
template<typename R, typename A1, typename ...Types>
struct argument_type<0, R(A1, Types...)>
{
  typedef A1 type;
};

template<size_t N, typename R, typename A1, typename ...Types>
struct argument_type<N, R(A1, Types...)>
{
  typedef typename argument_type<N-1, R(Types...)>::type type;
};

template<typename T> void foo(const T& t)
{
  // T : double(short, int)
  typename argument_type<2, t>::type ret;
  
  cout << typeid(ret).name() << endl;
}

About Taehyung Kim

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

Star
Useful Links