zoukankan      html  css  js  c++  java
  • 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 的泛型参数加上上界和下界,从而形成有界泛型参数。

  • 相关阅读:
    cf C. Vasya and Robot
    zoj 3805 Machine
    cf B. Vasya and Public Transport
    cf D. Queue
    cf C. Find Maximum
    cf B. Two Heaps
    cf C. Jeff and Rounding
    cf B. Jeff and Periods
    cf A. Jeff and Digits
    I Think I Need a Houseboat
  • 原文地址:https://www.cnblogs.com/zwvista/p/12418424.html
Copyright © 2011-2022 走看看