gpt4 book ai didi

c++ - c++ 概念如何结合概念?

转载 作者:行者123 更新时间:2023-12-03 06:50:25 25 4
gpt4 key购买 nike

我继承了以下内容:

template <typename T>
concept IsAwaiter = requires {
typename T::await_ready;
typename T::await_suspend;
typename T::await_resume;
};

template <typename ...AWAITABLES>
concept IsAwaitables = typename std::conjunction<IsAwaiter<AWAITABLES>...>::type;
使用 clang 10.0.0 构建它会导致以下错误:
IsAwaiter.h:43:50: error: template argument for template type parameter must be a type
也许只是一个简单的语法问题,但我发现很难找到一个示例来展示如何基于可变参数模板概念参数创建概念。
任何帮助表示赞赏!

最佳答案

std::conjunction用于类型特征。 std::conjunction<IsAwaiter<AWAITABLES>...>是具有成员的类型 static bool value = (IsAwaiter<AWAITABLES>::value && ...) , 其中每个 IsAwaiter<AWAITABLES>本身预计是一个类型特征,有自己的 static bool成员(member)value .当 IsAwaiter<AWAITABLES> 时,这是荒谬的是一个概念,因为概念不是类型特征。它们“只是” bool 值。使用折叠表达式。

template <typename... AWAITABLES>
concept IsAwaitables = (IsAwaiter<AWAITABLES> && ...);
就是这样。
struct Dummy {
using await_ready = Dummy;
using await_suspend = Dummy;
using await_resume = Dummy;
};

int main() {
static_assert(IsAwaitables<>);
static_assert(IsAwaitables<Dummy>);
static_assert(IsAwaitables<Dummy, Dummy>);
}

关于c++ - c++ 概念如何结合概念?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63799653/

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