然而,从C++17开始,std::result_of已经被弃用,取而代之的是std::invoke_result。 std::invoke_result也是一个模板类,它的使用方式是std::invoke_result_t,其中F是函数类型,Args...是参数类型列表。与std::result_of不同,std::invoke_result可以处理更多的情况,例如成员函数指针和成员数据指针。 在实际的编程中...
在C++11 中予以规范时,std::result_of 的行为在 INVOKE(std::declval<F>(), std::declval<ArgTypes>()...) 非良构时(例如 F 根本不是可调用类型时)是未定义的。C++14 更改为 SFINAE(F 不可调用时,std::result_of<F(ArgTypes...)> 只是没有 type 成员)。
在C++11 中规范时, std::result_of 的行为在 INVOKE(std::declval<F>(), std::declval<ArgTypes>()...) 为病式时(例如 F 完全不可调用时)未定义。 C++14 更改为 SFINAE( F 不可调用时, std::result_of<F(ArgTypes...)> 简单地无 type 成员)。
result_of<F(Args..)>::type和decltype(std::declval<F>()(std::declval<Args>()...)INVOKE就是关于这个INVOKE。使用declval/decltype除了types要长得多之外,只有在F是可直接调用的时候才是有效的(函数对象types或函数或函数指针),result_of还支持指向成员函数的指针和指向成员数据的指针。 最初,使用declval/d...
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::...
目录 目录 前言 invoke_result 标准库中的invoke_result 我的实现 后记 前言 本篇博文将详细介绍一下libstdc++中std::invoke_result的实现过程,由于个人水平不足,可能最终的实现过程略有误差,还请各位指正。 invoke_result std::in
std::result_of使用一个虚构的函数类型作为模板参数的行为有点奇怪,并导致了这些问题。这就是它被std:...
std::result_of 是一个模板工具,用于推断函数对象调用结果的类型。然而,由于其在使用中的复杂性和局限性,C++17已将其弃用,并建议使用 std::invoke_result 作为替代。std::invoke_result 提供了更直观和灵活的函数调用结果类型推断机制。 总结 C++标准的不断演进带来了许多新特性和改进,同时也意味着一些旧特性和库...
std::invoke_result是C++17中的一个模板类,可以用来获取调用特定函数对象或函数指针后的返回值类型。它接受一个可调用对象类型和参数类型作为模板参数,并提供一个嵌套成员类型,表示调用该可调用对象后的返回值类型。 使用std::invoke_result可以方便地获取函数对象或函数指针的返回值类型,无需手动推断或指定返回值类型...
:result_of 了,替代品是 std::invoke_result,用法是 std::invoke_result<Invocable, Args...> ...