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

时间:2020-05-19 20:32:27

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

对于概念,我们可以要求模板参数符合概念,例如在:

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

我们将struct S参数化为类型为A的类型,我们需要符合概念ForwardIterator。然后我们可以实例化S<std::vector<int>::iterator>,但不能实例化,例如S<std::vector<int>>

我的问题与在上述情况下将用于代替T的具体类型A的定义有关:*我们能否声明类型T符合{ {1}}在定义时就已经存在,没有实例化ForwardIterator

1 个答案:

答案 0 :(得分:1)

从语言上讲,concept定义创建一个constexpr bool变量模板。由于概念的实例化是constexpr变量,因此可以在static_assert语句中使用它。因此,如果您已经声明了某种类型T,并希望基于所有可访问的声明来验证其是否适合概念C,则可以进行static_assert(C<T>);

当然,许多概念并不是那么简单。许多概念限制了多个参数。他们表达了多种类型之间的关系。您不应该以这种OOP /继承方式来限制对概念的思考。