• C++20尝鲜:概念(Concepts)


    约束和概念

    C++20引进了概念(Concepts)这一新特性。
    概念是指给一组要求(Requirements)所起的名字。概念是一种具名谓词。
    使用这些要求和概念可以给函数和类模板的参数加上约束(Constraints)。

    引入概念的目的

    • 约束成为模板界面的一部分
    • 基于概念的重载成为可能
    • 模板的出错信息更加友好
    • 没有约束的 auto 和有约束的概念得到统一

    约束的种类

    约束有三种类型

    • 合取(conjunction)
      约束的合取:使用 && 运算符
    • 析取(disjunction)
      约束的析取:使用 || 运算符
    • 原子约束(atomic constraint)

    Requires 子句

    Requires 子句由关键字 requires 后加上常量表达式构成,用于指定约束。

    Requires 表达式

    Requires 表达式是 bool 类型的右值表达式,用于表达约束。其形式为

    requires ( 形参列表(可选) ) { 要求序列 }

    要求序列中的要求有以下四种形式:

    • 简单要求(simple requirement)
      简单要求是任意表达式语句。
    • 类型要求(type requirement)
      类型要求是关键字 typename 加一个类型名。
    • 复合要求(compound requirement)
      { 表达式 } noexcept(可选) 返回类型要求(可选) ;
      返回类型要求 - -> 类型约束
    • 嵌套要求(nested requirement)
      requires 约束表达式 ;

    C#中的泛型约束

    约束 说明 版本
    where T : struct T必须是值类型 2.0
    where T : class T必须是引用类型 2.0
    where T : [base class] T必须继承自[base class]类型 2.0
    where T : [interface] T必须实现[interface]类型 2.0
    where T : new() T必须带有一个没有参数的构造器 2.0
    where T : unmanaged T必须是非托管类型 7.3
    where T : Enum T必须是枚举类型 7.3
    where T : Delegate T必须是委托类型 7.3

    Java中的泛型约束

    使用 extends 以及 super 关键字可以给 Java 的泛型参数加上上界和下界,从而形成有界泛型参数。

  • 相关阅读:
    想当老板的人,三点特征很重要(转)
    突破三个自我,你就不光是老板的料
    掌握这3套创业战略 保你赚到百万财富 
    也感山西黑窑洞
    再游府河有感
    朋友的影响力非常大,朋友决定你的财富
    夏日乘凉
    职业生涯的八大“定位法则”
    一生何求
    赠你一方明月
  • 原文地址:https://www.cnblogs.com/zwvista/p/12418424.html
Copyright © 2020-2023  润新知