gpt4 book ai didi

c++ - std::invoke_result on std::tie

转载 作者:行者123 更新时间:2023-11-30 01:03:01 25 4
gpt4 key购买 nike

我将 GCC 7.3 与 C++17 一起使用,但我不明白为什么这一行会失败:

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’

最佳答案

都在错误信息中:

note: expected a type, got ‘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关键字 - 别名消除了这种需要。

关于c++ - std::invoke_result on std::tie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54989993/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com