繁体   English   中英

std :: tie上的std :: invoke_result

[英]std::invoke_result on std::tie

我在C ++ 17中使用GCC 7.3,但我不明白为什么此行失败:

template <typename... Args>
using X = std::invoke_result<std::tie, Args...>::type;

错误是:

error: type/value mismatch at argument 1 in template 
parameter list for ‘template<class _Functor, class ... _ArgTypes> 
struct std::invoke_result’
using X = std::invoke_result<std::tie, Args...>::type;
note:   expected a type, got ‘std::tie’

都是在错误消息中:

注意:需要一个类型,得到了'std :: tie'

invoke_result是一个带有一堆类型的元函数。 std::tie()函数模板 -它不是类型。 而且它甚至都不是对象,因此您也无法执行invoke_result<decltype(std::tie), Args...>

invoke_result为您提供的是一种适用于所有可调用对象的语法。 但是您不需要使用std::tie它是一个函数模板,因此您可以在未评估的上下文中直接调用它:

template <typename... Args>
using X = decltype(std::tie(std::declval<Args>()...));

注意:除非您真的特别需要元函数本身,否则始终使用_t别名。 也就是说, std::invoke_result_t<...>而不是std::invoke_result<...>::type 无论如何,后者是错误的,因为您缺少typename关键字-并且别名消除了这种需要。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM