0

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

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

我们使用符合该概念所需struct S的类型对 进行参数化。然后我们可以实例化但不能实例化,例如.AForwardIteratorS<std::vector<int>::iterator>S<std::vector<int>>

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

4

1 回答 1

1

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

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

于 2020-05-19T21:21:28.037 回答