【问题标题】:Doesn't using directives work with c++20 concepts?使用指令不适用于 c++20 概念吗?
【发布时间】:2020-07-17 23:24:58
【问题描述】:

使用指令是否不适用于概念?为什么?

下面的例子不起作用,我收到一个编译器错误,说它需要一个类型。

#include <concepts>

namespace A::X {

  struct BaseA {};

  template < typename AType >
    concept DerivedFromA = std::derived_from < AType, BaseA >;

}

namespace A {

  using DerivedFromA = X::DerivedFromA;

}

我希望能够以 DerivedFromA 而不是 X::DerivedFromA 的形式从命名空间 A 访问概念 DerivedFromA

【问题讨论】:

  • 您能否发布编译器的确切错误,包括行号和任何其他必要的信息??
  • 您到底想达到什么目的? using 可能不适合使用。
  • 概念不是类型。在这里不能使用using 是有道理的。
  • 概念类似于类型的谓词,但在确定一个概念何时比另一个更严格限制时具有一些额外的实用性(例如,random_access_iteratorforward_iterator 严格限制更多)。这使得它们比类型更接近函数(仅限于返回布尔值)。事实上,在标准化之前,您曾经可以将它们拼写为 concept bool Foo() { return ... }
  • 术语说明:using-directiveusing namespace N;,这不是您正在做的事情。

标签: c++ generic-programming c++20 c++-concepts


【解决方案1】:

使用指令是否不适用于概念?为什么?

因为您使用using 的方式声明了一个类型别名。而且concepts 不是类型模板。

打算要做的是让一个名称空间中的名称在另一个名称空间中可用。看起来像这样:

namespace A
{
  using X::DerivedFromA;
}

这适用于各种名称。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-14
    • 1970-01-01
    • 2020-12-11
    • 2021-11-27
    • 2023-03-27
    相关资源
    最近更新 更多