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 的泛型参数加上上界和下界,从而形成有界泛型参数。

  • 相关阅读:
    QString乱谈(2)
    QString 乱谈(1)
    Mingw版QtCreator调用VS编译的C++库的方法
    webrtc doubango linphone
    Neo4j图数据库配置文件详解
    Spring系列之Spring常用注解总结
    写一手好SQL很有必要
    史上最全的MySQL高性能优化实战总结!
    elasticsearch 亿级数据检索案例与原理
    Rust 优劣势: v.s. C++ / v.s. Go(持续更新)
  • 原文地址:https://www.cnblogs.com/zwvista/p/12418424.html
Copyright © 2011-2022 走看看