c++20 概念:我们可以将结构声明为符合概念吗?

c++20 concepts: Can we declare a struct as conforming to a concept?

有了概念,我们可以要求模板参数符合一个概念,例如在:

template<ForwardIterator A>
struct S { A a; };

我们用类型 A 参数化 struct S,我们需要它符合概念 ForwardIterator。那么我们可以实例化S<std::vector<int>::iterator>而不实例化,比如S<std::vector<int>>.

我的问题与具体类型 T 的定义有关,在上述情况下将用于代替 A: *我们可以声明一个类型 T 以符合到 ForwardIterator 已经在其定义时,没有实例化 S<T>?

从语言上讲,concept 定义会创建一个 constexpr bool 变量模板。由于概念的实例化是一个 constexpr 变量,您可以在 static_assert 语句中使用它。因此,如果您已经声明了某种类型 T 并且在某个时候想要验证它是否符合基于所有可访问声明的概念 C,那么您可以执行 static_assert(C<T>);.

当然,很多概念并不是那么简单。许多概念约束多个参数;他们表达了多种类型或其他类型之间的关系。你不应该以这种 OOP/inheritance 的方式限制你对概念的思考。