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
文章目录