typename Arg>auto call_with_result_of(Func f, Arg a) -> typename std::result_of<Func(Arg)>::type {return f(a);}// 使用std::invoke_result推导函数调用结果类型template<typename Func, typename Arg>auto call_with_invoke_result(Func f, Arg a) -> std::invoke_result...
std::result_of 背后的动机是为了确定调用可调用 (Callable) 类型的结果,尤其是结果类型对不同实参集不同的情况。 F(Args...) 是以Args... 为实参类型而以 F 为返回类型的函数类型。因而,std::result_of 承受了许多怪异,导致它在 C++17 中被 std::invoke_result 取代而被弃用: F...
std::result_of<F(Args...)被定义为: 如果expression式INVOKE (declval<Fn>(), declval<ArgTypes>()...)在作为INVOKE (declval<Fn>(), declval<ArgTypes>()...)操作数(条款5)处理时形成良好,则成员types定义types应将types命名为decltype(INVOKE (declval<Fn>(), declval<ArgTypes>()...));否则,不...
std::result_of 后的动机是确定调用可调用 (Callable) 类型的结果,尤其是结果类型对不同参数集不同的情况。 F(Args...) 是以Args... 为参数而以 F 为返回类型的函数类型。因而, std::result_of 承受了许多怪异,导致它在 C++17 中被 std::invoke_result 取代而被弃用: F...
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::invoke_result的模板参数与std::result_of略有不同:第一个参数是可调用的对象(如函数、函数对象、lambda等),后续参数是该可调用对象的参数类型。 4. 若C++版本低于17,考虑升级C++标准或寻找替代方案 如果你的项目必须使用C++11或C++14,并且你无法升级C++标准,那么你可能需要寻找替代方案来避免使用std:...
并导致了这些问题。这就是它被std::invoke_result取代的原因之一,std::invoke_result将可调用类型和...
你可以在这里找到一个可能的实现:https://en.cppreference.com/w/cpp/types/result_of。如果我没有...
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...
所以C++17已经不建议使用(deprecate)std::result_of 了,替代品是 std::invoke_result,用法是 ...