c++ - 我们可以声明一个结构体符合一个概念吗?

标签 c++ 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符合ForwardIterator已经在定义时,没有实例化 S<T>

最佳答案

一个concept定义创建常量表达式模板。由于概念的实例化是常量表达式,因此您可以在 static_assert 中使用它。陈述。因此,如果您声明了某种类型 T并且在某个时候想要验证它是否符合一个概念C基于所有可访问的声明,那么您可以执行 static_assert(C<T>); .

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

关于c++ - 我们可以声明一个结构体符合一个概念吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61900260/

相关文章:

c++ - 在 Xcode 6 中运行 cpp-netlib - 编译但在运行时崩溃

c++ - 未计算上下文中的 lambda (C++20 前)

c++ - Qt 6.4.3 QMediaPlayer::资源错误 "Could not open file"

c++ - 检查嵌套类模板的概念

c++ - 如何为概念输入参数分配默认参数

c++ - C++20 概念是否能够修复模板函数作为模板参数问题?

c++ - 使用模板从函数返回不同的数据类型

c++ - 监控打印机

c++ - C++ 中是否有用于字符串的 removeAt 函数?

c++ - 使用 C++20 在编译时检查容器中是否存在重复元素