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

类型映射

用模板特化建立“类型到类型的关联”,从而让通用代码能根据“标签类型”自动适配不同的类型组合。

点击查看代码
#include <iostream>class Test1;
class Test2;//这是默认映射:对任意类型 T,都映射到 void
template <typename T>
class TypeTbl {
public:typedef void ret_type;typedef void par1_type;typedef void par2_type;
};//特定类型做了特化
template<>
class TypeTbl<Test1> {
public:typedef char ret_type;typedef int par1_type;typedef double par2_type;
};template<>
class TypeTbl<Test2> {
public:typedef short ret_type;typedef long par1_type;typedef float par2_type;
};template <typename T>
class Test {
public:typename TypeTbl<T>::ret_type compute(typename TypeTbl<T>::par1_type x,typename TypeTbl<T>::par2_type y) {return static_cast<typename TypeTbl<T>::ret_type>(x);}
};int main() {Test<Test1> t1;char result = t1.compute(65, 3.14);std::cout << "Result from Test<Test1>: " << result << std::endl; // 输出 'A'Test<Test2> t2;// 注意:100000 可能超出 short 范围!改用安全值short result2 = t2.compute(1000L, 2.718f);std::cout << "Result from Test<Test2>: " << result2 << std::endl;// system("pause"); // 移除或替换为 std::cin.get();return 0;
}
template <typename T>
class Test {
public:typename TypeTbl<T>::ret_type compute(typename TypeTbl<T>::par1_type x,typename TypeTbl<T>::par2_type y) {return static_cast<typename TypeTbl<T>::ret_type>(x);}
};

编译器在实例化 Test 时,会:

  • 1 查看TypeTbl<Test1>的特化版本;
  • 2 得到 ret_type = char, par1_type = int, par2_type = double;
  • 3 生成函数签名:char compute(int, double)

同理,Test<Test2> 会生成:short compute(long, float)
可以把 TypeTbl 想象成一个“字典”或“配置表”:

TypeTbl = {Test1: { ret: char,   par1: int,    par2: double },Test2: { ret: short,  par1: long,   par2: float  }
}
http://www.jsqmd.com/news/356186/

相关文章:

  • [信息论与编码理论专题-36]:社会天然倾向于为“高权重者”提供最短路径,以实现整体效率最大化——这是制度演化的理性选择。这既是现代社会高效运转的密码,也是其潜在危机的根源。
  • [信息论与编码理论专题-35]:哈夫曼编码背后的社会学意义:权重越高,则离根节点越近,可达的路径越短,在系统中的地位越高,总体的资源消耗最小,系统的效率最高。
  • 合集-线性代数
  • 小程序毕设项目推荐-基于微信小程序的奶茶连锁店管理系统奶茶物料出入库盘点采购基于springboot+小程序的奶茶连锁店小程序设计与实现【附源码+文档,调试定制服务】
  • 一文掌握:AI应用架构师的AI模型分布式部署核心技术
  • 合集-微积分
  • 数据库优化提速(四)新加坡房产系统开发数据库表结构—仙盟创梦IDE
  • 小程序毕设选题推荐:基于springboot+小程序的奶茶连锁店小程序设计与实现【附源码、mysql、文档、调试+代码讲解+全bao等】
  • AMD显卡也能畅玩AI画图!ROCm+ComfyUI部署全指南
  • 计算机小程序毕设实战-基于springboot+小程序的奶茶连锁店小程序设计与实现基于微信小程序的奶茶店点餐系统【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • 【课程设计/毕业设计】基于微信小程序的奶茶店点餐系统基于springboot+小程序的奶茶连锁店小程序设计与实现【附源码、数据库、万字文档】
  • Linux命令-lpr(从命令行提交文件到打印机打印)
  • 简介
  • 小程序毕设项目推荐-基于springboot+小程序的奶茶连锁店小程序设计与实现【附源码+文档,调试定制服务】
  • 超实用!低查重AI教材编写工具助力,快速完成高质量教材创作
  • 小程序计算机毕设之基于SpringBoot+微信小程序奶茶在线点单小程序系统 基于springboot+小程序的奶茶连锁店小程序设计与实现(完整前后端代码+说明文档+LW,调试定制等)
  • AI专著写作秘籍:精选工具推荐,为你的学术之路加速赋能
  • 【计算机毕业设计案例】基于uniapp的奶茶店点餐微信小程序+基于SpringBoot和Vue的管理后台.基于springboot+小程序的奶茶连锁店小程序设计与实现(程序+文档+讲解+定制)
  • ABC444
  • AWS EC2新手入门:6步带你从零启动实例
  • 低查重AI教材编写攻略,专业工具助你快速完成教材!
  • 寒假学习(15)(HAL库6)
  • 浅谈路由器Openwrt防火墙的-端口转发-与-NAT穿透-区别与优缺点
  • AI写专著的高效法门:工具推荐与使用技巧,助你快速完成大作
  • 基于SpringBoot和Vue的汽车租赁买卖管理系统
  • 基于SpringBoot和Vue的民宿预定信息管理系统
  • 【轴承故障检测】滚动轴承中进行基于振动的故障诊断研究附Matlab代码
  • 基于SpringBoot和Vue的美食信息推荐网站系统
  • 基于SpringBoot和Vue的旅游出行指南系统
  • AI写专著必备!几款顶尖工具对比,为你的专著写作保驾护航!