当前位置: 首页 > news >正文

C++ 11 模板萃取

直接上代码:

首先定义枚举类型

enum RELATION_SHIP {SINGLE,MULTI
};enum TRANS_MODE {UNICAST,BROARDCAST
};

定义空结构体,用于携带类型信息(模板参数)

template<RELATION_SHIP, RELATION_SHIP, TRANS_MODE>
struct WR{};

声明主模板

template<typename T>
struct Relation_Traint;

这里是前向声明,用于告诉编译器,后面会进行Relation_Traint<T>的特化定义(如:针对 WR<rp, rc, tm>的全特化版本)

template<RELATION_SHIP rp, RELATION_SHIP rc, TRANS_MODE tm>
struct Relation_Traint<WR<rp, rc, tm>> {static constexpr bool is_muti_p = (rp == MULTI);static constexpr bool is_muti_c = (rc == MULTI);static constexpr bool is_broadcast = (tm == BROARDCAST);
};

针对 Policy<Flag> 的模板模板参数

template<template<typename> class Policy, typeName Flag>
struct Relation_Traint<Policy<Flag>> : Relation_Traint<Flag>{};

这个特化是为了支持 策略类包装器,下面进行举例说明:

template<typename>
struct MyPolicy{};using MyType = MyPolicy<WR<MULTI,MULTI,BROADCAST>>;void Func(){if(Relation_Traint<MyType>::is_muti_p == true){cout<<"Is MULTI"<<endl;
}
}

Relation_Traint<Policy<Flag>>通过继承 Relation_Traint<Flag>,实现了“透明转发”,即忽略 Policy 外壳,直接看内部的 Flag

http://www.dtcms.com/a/312089.html

相关文章:

  • 丑数-优先队列/三指针/动态规划
  • Linux 动静态库的制作和使用
  • 深度剖析PyTorch torch.compile的性能曲线与优化临界点
  • SpringBoot 01 IOC
  • PyTorch 张量核心操作——比较、排序与数据校验
  • java实现运行SQL脚本完成数据迁移
  • 通俗易懂解释Java8 HashMap
  • Rust进阶-part1-智能指针概述-box指针
  • 【多模态】DPO学习笔记
  • 嵌入式文件系统
  • Java中Lambda 表达式的解释
  • PCB铜浆塞孔工艺流程
  • 如何快速解决PDF解密新方法?
  • 使用C++实现日志(1)
  • 疏老师-python训练营-Day33 MLP神经网络的训练
  • AbstractExecutorService:Java并发核心模板解析
  • 深入 Go 底层原理(一):Slice 的实现剖析
  • 二叉树链式结构的实现
  • lesson31:Python异常处理完全指南:从基础到高级实践
  • 乌鸫科技前端二面
  • Go语言中的闭包详解
  • OpenCV学习 day3
  • stm32是如何实现电源控制的?
  • 如何防止内存攻击(Buffer Overflow, ROP)
  • 髋臼方向的定义与测量-I
  • u-boot启动过程(NXP6ULL)
  • android studio 安装Flutter
  • WD5208S,12V500MA,应用于小家电电源工业控制领域
  • Kubernetes 构建高可用、高性能 Redis 集群实战指南
  • #C语言——学习攻略:探索字符函数和字符串函数(一)--字符分类函数,字符转换函数,strlen,strcpy,strcat函数的使用和模拟实现