c++ std::result_of
作用
用于在编译的时候推导出一个可调用对象(函数,std::funciton或者重载了operator()操作的对象等)的返回值类型.主要用于模板编写中.
样例1
#include<bits/stdc++.h>
using namespace std;
class S
{
public:
double operator()(char, int&); // 这个函数的返回类型是 double
};
double S::operator()(char, int&)
{
return 0;
}
int main()
{
std::result_of<S(char, int&)>::type foo = 3.14; // 使用这样的写法会推导出模板参数中函数的返回值类型
typedef std::result_of<S(char, int&)>::type MyType; // 是 double 类型吗?
std::cout << "foo's type is double: " << std::is_same<double, MyType>::value << std::endl;
return 0;
}
答案:
foo's type is double: 1
样例2
// result_of example
#include <iostream>
#include <type_traits>
int fn(int) {return int();} // function
typedef int(&fn_ref)(int); // function reference
typedef int(*fn_ptr)(int); // function pointer
struct fn_class { int operator()(int i){return i;} }; // function-like class
int main() {
typedef std::result_of<decltype(fn)&(int)>::type A; // int
typedef std::result_of<fn_ref(int)>::type B; // int
typedef std::result_of<fn_ptr(int)>::type C; // int
typedef std::result_of<fn_class(int)>::type D; // int
std::cout << std::boolalpha;
std::cout << "typedefs of int:" << std::endl;
std::cout << "A: " << std::is_same<int,A>::value << std::endl;
std::cout << "B: " << std::is_same<int,B>::value << std::endl;
std::cout << "C: " << std::is_same<int,C>::value << std::endl;
std::cout << "D: " << std::is_same<int,D>::value << std::endl;
return 0;
}
答案:
typedefs of int:
A: true
B: true
C: true
D: true