std::invoke_result是C++17中的一个模板类,可以用来获取调用特定函数对象或函数指针后的返回值类型。它接受一个可调用对象类型和参数类型作为模板参数,并提供一个嵌套成员类型,表示调用该可调用对象后的返回值类型。 使用std::invoke_result可以方便地获取函数对象或函数指针的返回值类型,无需手动推断或指定返回值类型。
如果从调用的情况来看,CTest::s和CTest::s_m一样,都是obj.fun(args...),但是实际中,std::invoke_result会将它视为对象成员。所以如果我们使用std::invoke_result<decltype(&CTest::s), CTest, int, double>::type是会报错的,正确的方法是只能使用std::invoke_result<decltype(&CTest::s), CTest>::ty...
// 一个使用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(&Foo::print_add, foo,1);// 调用(访问)数据成员std::cout <<"num_: "<< std::invoke(&Foo::num_, foo) <<'\n';// 调用函数对象std::invoke(PrintNum(),18);return0; } std::invoke_result用来获取调用函数的返回值类型。 std::invoke_result #include<type_traits>#include<ios...
std::result_of 背后的动机是为了确定调用可调用 (Callable) 类型的结果,尤其是结果类型对不同实参集不同的情况。 F(Args...) 是以Args... 为实参类型而以 F 为返回类型的函数类型。因而,std::result_of 承受了许多怪异,导致它在 C++17 中被 std::invoke_result 取代而被弃用: F...
一些类对象可能会具有一些相同的属性,如果用普通数据成员来描述这些相同的属性,这意味着我们需要给每个...
endl;// 输出: Result 1: 7// 使用 std::invoke 调用自由函数intresult2=std::invoke(multiply,3,4);std::cout<<"Result 2: "<<result2<<std::endl;// 输出: Result 2: 12intresult3=std::invoke([](inta,intb){returna+b;},519,1);std::cout<<"result3: "<<result3<<'\n';return0...
在大多数情况下,std::invoke_result 是用来推导基于给定参数类型的函数调用的结果类型的,而不需要实际的对象实例。因此,通常情况下,你不需要将 std::invoke_result 和std::declval 一起使用。 然而,有一些情况下,你可能会看到 std::invoke_result 和std::declval 一起使用。这主要是在处理一些更复杂的情况,比如...
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...