(C++ : Template) template 함수의 리턴, 매개변수 타입 구하기

Posted by : at

Category : Cpp


함수의 리턴 타입을 구해보자.

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

template<typename T> struct result_type
{
  // typedef T type;
  // 여기로 들어와서 type을 쓰려하면 에러를 출력하게 유도
};

template<typename R, typename A1, typename A2> 
struct result_type<R(A1, A2)>
{
  typedef R type;
};

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

int main()
{
  foo(hoo);
}

함수의 매개변수를 구해보자

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

template<typename T> struct argument_type
{
  // typedef T type;
  // 의도적 에러발생 유발
};

template<typename R, typename A1, typename A2, size_t N> 
struct argument_type<R(A1, A2), 0>
{
  typedef A1 type;
};

template<typename R, typename A1, typename A2, size_t N> 
struct argument_type<R(A1, A2), 1>
{
  typedef A2 type;
};

template<typename T> void foo(T& t)
{
  typename argument_type<T, 0>::type ret;
  cout << typeid(ret).name() << endl;
}

int main()
{
  foo(hoo);
}

About Taehyung Kim

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

Star
Useful Links