gpt4 book ai didi

c++ - 混合 void_t 和可变参数模板?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:26:42 27 4
gpt4 key购买 nike

考虑以下代码:

template <class F, class... Args, class = std::void_t<>>
struct is_invokable
: std::false_type {};
template <class F, class... Args>
struct is_invokable<F, Args..., std::void_t<std::invoke_result_t<F, Args...>>>
: std::true_type {};

目标是拥有一个特征,该特征能够判断类型为 F 的可调用对象是否可以使用类型为 Args... 的参数进行调用。

但是,编译失败是因为:

error: parameter pack 'Args' must be at the end of the template parameter list

在 C++17 中执行此操作的(优雅)方法是什么?

最佳答案

namespace details {
template <class F, class, class... Args>
struct is_invokable : std::false_type {};
template <class F, class... Args>
struct is_invokable<F, std::void_t<std::invoke_result_t<F, Args...>>, Args...>
: std::true_type {};
}
template <class F, class... Args>
using is_invokable=typename ::details::is_invokable<F, void, Args...>::type;

关于c++ - 混合 void_t 和可变参数模板?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47896147/

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