std::result_of<F(int)>::type x; std::result_of<f(int)>::type x; //错误的用法 //typename std::result_of<decltype(&f)(int)>::type x; //正确的方式1 //typename std::result_of<decltype((f))(int)>::type x; //正确的方式2, decltype((f))会返回一个引用 x = 0.1; std::ce...
result_of<F(Args..)>::type和decltype(std::declval<F>()(std::declval<Args>()...)INVOKE就是关于这个INVOKE。使用declval/decltype除了types要长得多之外,只有在F是可直接调用的时候才是有效的(函数对象types或函数或函数指针),result_of还支持指向成员函数的指针和指向成员数据的指针。 最初,使用declval/d...
template <typename KeyFn, typename ValueFn> // KeyFn为key对应的映射函数 即输入value_type类型的值 输出key ValueFn同理 std::multimap<typename std::result_of<KeyFn(value_type)>::type, typename std::result_of<ValueFn(value_type)>::type> // multimap的key和value都采用std::result_of获取类型...
std::result_of使用一个虚构的函数类型作为模板参数的行为有点奇怪,并导致了这些问题。这就是它被std:...
在泛型编程中,std::result_of的一个常见用途是在编写模板函数时推导函数调用的返回类型。例如,考虑以下代码: template<typename Func, typename Arg>auto call(Func f, Arg a) -> typename std::result_of<Func(Arg)>::type {return f(a);} 在这个例子中,std::result_of::type用于推导call函数的返回类型...
result_of是introduced in Boost,然后是included in TR1,最后是C++0x。因此,result_of具有向后兼容的...
:result_of 了,替代品是 std::invoke_result,用法是 std::invoke_result<Invocable, Args...> ...
std::result_of是C++标准库中的一个模板类,用于获取函数调用表达式的返回类型。它可以用于常量重载方法,即在编译时确定函数调用表达式的返回类型。 std::result_of的使用方法如下: 代码语言:cpp 复制 template<classFn,class...Args>typenamestd::result_of<Fn(Args...)>::typefunc(Fn&&fn,Args&&...args){/...
std::result_of 在C++11和C++14中是可用的,但在C++17中被标记为废弃,并在C++20中被移除。如果你的编译器设置为C++17或更高版本,那么使用std::result_of将会导致编译错误。 2. 检查代码中std::result_of的使用上下文 接下来,你需要检查代码中std::result_of的使用上下文。例如,你可能在尝试获取某个函数调用...
在C++11 中予以规范时,std::result_of 的行为在 INVOKE(std::declval<F>(), std::declval<ArgTypes>()...) 非良构时(例如 F 根本不是可调用类型时)是未定义的。C++14 更改为 SFINAE(F 不可调用时,std::result_of<F(ArgTypes...)> 只是没有 type 成员)。