有了概念,我们可以要求模板参数符合概念,例如在:
template<ForwardIterator A>
struct S { A a; };
我们参数化struct S
类型为A
我们要求符合这个概念ForwardIterator
。然后我们就可以实例化S<std::vector<int>::iterator>
但不是,例如 S<std::vector<int>>
.
我的问题涉及具体类型的定义 T
将用于代替 A
在上面的例子中: *我们可以声明一个类型 T
符合ForwardIterator
已经在定义时,没有实例化 S<T>
?
最佳答案
一个concept
定义创建常量表达式模板。由于概念的实例化是常量表达式,因此您可以在 static_assert
中使用它。陈述。因此,如果您声明了某种类型 T
并且在某个时候想要验证它是否符合一个概念C
基于所有可访问的声明,那么您可以执行 static_assert(C<T>);
.
当然,很多概念并不是那么简单。许多概念约束多个参数;它们表达了多种类型之间的关系或其他什么。您不应该以这种 OOP/继承的方式限制您对概念的思考。
关于c++ - 我们可以声明一个结构体符合一个概念吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61900260/