std::invoke_result是C++17中的一个模板类,可以用来获取调用特定函数对象或函数指针后的返回值类型。它接受一个可调用对象类型和参数类型作为模板参数,并提供一个嵌套成员类型,表示调用该可调用对象后的返回值类型。 使用std::invoke_result可以方便地获取函数对象或函数指针的返回值类型,无需手动推断或指定返回值类型。
// 一个使用std::invoke_result的例子#include <type_traits>#include <functional>template<typename Callable, typename... Args>using result_of_t = typename std::invoke_result<Callable, Args...>::type;template<typename Callable, typename... Args>result_of_t<Callable, Args...> call(Callable&& ...
std::invoke_result是C++17标准库里面的一个接口,它可以返回任何可调用的返回值,比如函数,函数对象,对象方法等。它的接口为[1]template< class F, class... ArgTypes> class invoke_result; 在C++17之前,std::invoke_result有一个类似功能的模板,名字为std::result_of,他们之间的差别只有在接口上有略微的...
std::result_of 背后的动机是为了确定调用可调用 (Callable) 类型的结果,尤其是结果类型对不同实参集不同的情况。 F(Args...) 是以Args... 为实参类型而以 F 为返回类型的函数类型。因而,std::result_of 承受了许多怪异,导致它在 C++17 中被 std::invoke_result 取代而被弃用: F...
std::invoke_result是C++17标准库⾥⾯的⼀个接⼝,它可以返回任何可调⽤的返回值,⽐如函数,函数对象,对象⽅法等。它的接⼝为 template< class F, class... ArgTypes> class invoke_result;在C++17之前,std::invoke_result有⼀个类似功能的模板,名字为std::result_of,他们之间的差别只有在...
std::result_of 后的动机是确定调用可调用 (Callable) 类型的结果,尤其是结果类型对不同参数集不同的情况。 F(Args...) 是以Args... 为参数而以 F 为返回类型的函数类型。因而, std::result_of 承受了许多怪异,导致它在 C++17 中被 std::invoke_result 取代而被弃用: F...
result_of<F(Args..)>::type和decltype(std::declval<F>()(std::declval<Args>()...)INVOKE就是关于这个INVOKE。使用declval/decltype除了types要长得多之外,只有在F是可直接调用的时候才是有效的(函数对象types或函数或函数指针),result_of还支持指向成员函数的指针和指向成员数据的指针。
一些类对象可能会具有一些相同的属性,如果用普通数据成员来描述这些相同的属性,这意味着我们需要给每个...
std::result_of, std::invoke_result std::integral_constant std::is_constant_evaluated std::max_align_t offsetof NULL std::bad_typeid std::bad_cast std::numeric_limits std::type_info std::ptrdiff_t std::byte std::conjunction std::disjunction std::negation std::is_swappable_with, std::...
std::result_of has been deprecated in C++17 and removed in C++20. This PR adds a preprocessor switch to use the new std::invoke_result type introduced in C++17, while still using std::result_of on C++11 and C++14. Use std::invoke_result instead of std::result_of if supported 53f...