1. std::result_of是什么?为什么它出现?
C++11中的std::result_of
是一个专门用来推导函数调用返回类型的模板工具,它解决了在模板编程中“我不知道某个函数对象调用后返回什么类型”的难题。
1. std::result_of是什么?为什么它出现?
在传统C++里,如果你写一个模板函数调用另一个函数对象,你往往不知道那个函数调用会返回什么类型。比如:
template<typename Func, typename Arg>
auto invoke(Func f, Arg a) -> /* 返回类型? */ {return f(a);
}
这里,invoke
想调用f(a)
,但怎么写返回类型呢?C++11之前只能写成typename Func::result_type
(依赖函数对象定义)或者自己写死,显然不够灵活。
std::result_of
就是为了解决这个问题而生的。它能在编译期推导出调用Func
带参数Arg
后返回的类型,形式是:
typename std::result_of<Func(Arg)>::type
它告诉编译器:“帮我算出调用Func
传入Arg
后返回的类型是什么。”
个人教程网站内容更丰富:(https://www.1217zy.vip/)