【问题标题】:list of standard concepts? [closed]标准概念列表? [关闭]
【发布时间】:2014-08-22 17:17:33
【问题描述】:

据我所知,C++ 有诸如 Mergable、Container、Comparable、Sortable、Arithmetic 等概念。我到处都看到过它们,但我从未见过列表。在哪里可以找到标准 C++ 概念的列表?

-edit- 人们很困惑,但我的意思是this slide 中的示例模板行,它具有容器和可排序。还有什么?

【问题讨论】:

  • 请澄清您的问题。 MergeableSortable 是尚未达到标准的 Concepts Lite 的一部分(因此 c++1y 标签是合适的),并且在您的问题中明确提到了它们。您指的是概念精简版吗?或者你的意思是类型要求,因为我们在 C++03 中已经有了它们?
  • 请澄清您的问题。 ContainerComparable 是 C++03 标准中定义的类型要求的一部分,它们在您的问题中明确提及。您指的是类型要求吗?还是说概念?

标签: c++ c++-concepts


【解决方案1】:

据我所知,C++ 有诸如 Mergable、Container、Comparable、Sortable、Arithmetic 等概念。我到处都看到过它们,但我从未见过列表。在哪里可以找到标准 C++ 概念的列表?

什么是概念

概念是一个术语,指的是编译器必须强制执行的类型要求的形式化。 This draft (N3580) 包含所有详细信息。

什么是类型要求

类型要求是一组要求,即使在 C++03 标准中也有定义,程序员必须强制执行这些要求才能对所述类型应用某些操作。标准从不称它们为概念

类型要求列表

我认为您的意思是类型要求,因为:

  • 你提到了Container
  • 你提到了Comparable
  • 记得C++ 有“概念”这一事实

所以,这里是类型要求列表,您还可以在其中找到 ContainerCompare(由 cppreference 组织):

基本

  • DefaultConstructible
  • 可移动构造
  • 可复制构造
  • 可移动分配
  • CopyAssignable
  • 可破坏

布局

  • 可轻松复制
  • TrivialType
  • 标准布局类型
  • POD 类型

图书馆范围

  • 平等可比
  • LessThanComparable
  • 可更换
  • ValueSwappable
  • 可空指针
  • 哈希
  • 分配器
  • 函数对象
  • 可调用
  • 谓词
  • 二进制谓词
  • 比较

容器

  • 容器
  • 可逆容器
  • AllocatorAwareContainer
  • 序列容器
  • AssociativeContainer
  • UnorderedAssociativeContainer

容器元素

  • CopyInsertable
  • MoveInsertable
  • EmplaceConstructible

迭代器

  • 迭代器
  • 输入迭代器
  • 输出迭代器
  • ForwardIterator
  • 双向迭代器
  • RandomAccessIterator

流 I/O 函数

  • 无格式输入函数
  • 格式化输入函数
  • 无格式输出函数
  • 格式化输出函数

随机数生成器

  • 种子序列
  • UniformRandomNumberGenerator
  • 随机数引擎
  • RandomNumberEngineAdaptor
  • 随机数分布

并发

  • 基本可锁定
  • 可锁定
  • 可定时锁定
  • 互斥体
  • 定时互斥
  • SharedTimedMutex

其他

  • 一元类型特征
  • BinaryTypeTrait
  • TransformationTrait
  • 时钟
  • 琐碎时钟
  • 角色特征
  • pos_type
  • off_type
  • 位掩码类型
  • 文字类型

【讨论】:

  • 我认为他的意思是Concepts Lite 尚未达到标准。例如:SortableMergeable 都不在您的列表中,尽管它们在问题中。我相信您的清单不是 OP 正在寻找的清单。
  • 嗯。我不认为他的意思是类型要求。他标记了他的问题 C++1y 并提到了 SortableMergeable。我认为他指的是Concepts Lite。我请他澄清一下。
  • 有趣,也许我的意思是你的两个答案。查看幻灯片我的编辑 cc @Ali
【解决方案2】:

在哪里可以找到标准 C++ 概念的列表?

显然,没有,它还没有达到标准;另见Is the Committee Draft of Standard C++14 public? 不过,相关文件似乎是Concepts Lite: Constraining Templates with Predicates (N3580)A Concept Design for the STL (N3351)。该列表截至 2014 年 6 月 15 日,取自 N3580:

类型特征

  • Equality_comparable
  • Totally_ordered
  • 可移动
  • 可复制
  • 半规则
  • 常规
  • 功能
  • Regular_function
  • 谓词
  • 关系

迭代器概念

  • 迭代器类别
  • 值类型
  • 差异类型
  • 可读
  • 可写
  • 可变的
  • 可变
  • 先进的
  • 可增量
  • Input_iterator
  • 输出迭代器
  • Forward_iterator
  • 双向迭代器
  • Random_access_itertor

算法约束

  • Indirectly_movable
  • Indirectly_copyable
  • Indirectly_swappable
  • Indirectly_equal
  • Indirectly_ordered
  • Indirectly_comparable
  • 可排序
  • 可合并

【讨论】:

  • 我认为他的意思是type requirements,即使在 C++03 中也存在。例如:ComparableContainer 都不在您的列表中,尽管它们在问题中。我相信您的清单不是 OP 正在寻找的清单。
  • @Jefffrey 好的,我们无法解决这个问题。他应该修改他的问题。
  • @Jefffrey 哦,我看到你也要求澄清。 :)
  • 恕我直言,这并不重要。我认为我们的两个列表都与问题相关,因此对未来的观点很有用。
  • 阿里做对了。如果您想查看我从@Jefffrey 收到问题的幻灯片,请查看我的编辑
【解决方案3】:

简而言之,“概念是一组由有效表达式、关联类型、不变量和复杂性保证组成的要求。满足要求的类型称为model 概念。一个概念可以扩展另一个概念的要求,这称为细化。”

来源:http://www.boost.org/community/generic_programming.html#concept

有几个可用的概念列表:

有关进一步的解释,请参阅以下“概念和建模”以及“细化”: https://www.sgi.com/tech/stl/stl_introduction.html

另见:

您可能还对以下内容感兴趣:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-23
    相关资源
    最近更新 更多