728x90
반응형
지정된 인수 유형을 사용하는 호출 가능 형식의 반환 형식을 결정한다.
template<class>
struct result_of; // Causes a static assert
template <class Fn, class... ArgTypes>
struct result_of<Fn(ArgTypes...)>;
// Helper type
template<class T>
using result_of_t = typename result_of<T>::type;
Fn : 쿼리할 호출 가능 형식
ArgTypes : 쿼리 할 호출 가능 형식에 대한 인수 목록의 형식
#include <type_traits>
#include <iostream>
struct S
{
double operator()(char, int&);
float operator()(int) { return 1.0; }
};
template <class T>
typename std::result_of<T(int)>::type f(T& t)
{
std::cout << "overload of f for callable T\n";
return t(0);
}
template<class T, class U>
int f(U u)
{
std::cout << "overload of f for non-callable T\n";
return u;
}
int main()
{
// char 및 int& 인수로 S를 호출한 결과는 double이다.
std::result_of<S(char, int&)>::type d = 3.14; // d는 double형이다.
static_assert(std::is_same<decltype(d), double>::value, "");
// int 인수로 S를 호출한 결과는 float입니다.
std::result_of<S(int)>::type x = 3.14; // x에는 float 유형이 있다.
static_assert(std::is_same<decltype(x), float>::value, "");
// result_of는 다음과 같이 멤버 함수에 대한 포인터와 함께 사용할 수 있다.
struct C { double Func(char, int&); };
std::result_of<decltype(&C::Func)(C, char, int&)>::type g = 3.14;
static_assert(std::is_same<decltype(g), double>::value, "");
f<C>(1);
return 0;
}
근데.. 잘 모르겠다. ㅎㅎ C++17부터는 사용하지 않는 용법이라니 접어둘까..
728x90
반응형
'Program Language > C & C++' 카테고리의 다른 글
[C++] error LNK2001: unresolved external symbol (Static member) (0) | 2021.10.07 |
---|---|
[C++] recursive_mutex (0) | 2021.10.07 |
[C++] Callable (0) | 2021.10.06 |
[C++] condition_variable (2) | 2021.10.05 |
[C++] noexcept (10) | 2021.10.01 |