【问题标题】:implement a C++20 concept实现一个 C++20 概念
【发布时间】:2021-08-06 22:41:58
【问题描述】:

如何以编程方式实现一个概念,就好像它是一个实际的“接口”?

例如,我最近尝试为自定义容器编写一个连续迭代器。而且因为连续迭代器有很多特征,所以我想确保没有遗漏任何东西,所以我使用了如下静态断言:

struct CustomContainer
{
    struct Iterator
    {
        using iterator_category = std::contiguous_iterator_tag;
        /* Iterator impl */
    };
    static_assert(std::contiguous_iterator<Iterator>);
};

问题在于编译器只是说“静态断言失败”并且没有给我提示我的实现中实际上缺少什么来满足这个概念。

那么,有没有更好的方法我应该知道?

【问题讨论】:

标签: c++ static-assert concept


【解决方案1】:

我认为目前没有办法通过概念来做到这一点。他们只能判断一个类型是否满足约束要求。

来源:

How to make a concept fail with a custom error message (C++20)

【讨论】:

  • 标准没有规定错误信息的内容。只有存在。这是 MSVC 中的 QOI 问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-04
  • 2020-09-03
  • 1970-01-01
  • 2021-03-15
  • 2020-09-28
  • 2021-07-12
  • 1970-01-01
相关资源
最近更新 更多