读loki有感,编译阶段发现两个类能否转化

简介: 读loki有感,编译阶段发现两个类能否转化

开发环境:VS2005(VC8)

以下代码在VS2002上运行不了,据说VS2002(VC7)不完全支持偏特化,VS2003(VC7.1)就支持了。

问题提出:

一,已知类型T,U,在编译阶段如何知道T能否转化成U。

template <class T, class U>
struct ConversionHelper
{
static long   Test(...);//WQ注:C++中,不定参数已不需要“至少一个定参”了。
 static short Test(U);
 static T MakeT();
};
template <class T, class U>
struct Conversion
{
 typedef ConversionHelper<T, U> H;
 enum { exists = sizeof(short) == sizeof(H::Test(H::MakeT())) };
};
class A
{
public:
 A()
 {
  TRACE("\r\nAr\n");
 }
};
class  B : public A
{
public:
 B()
 {
  TRACE("\r\nBr\r\n");
 }
};

测试代码:

bool b1 = Conversion<B,A>::exists;
bool b2 = Conversion<A,B>::exists;

运行结果分别为true,false.

二,接上面的问题。如果T能转化成U,则定义一个U类型的对象,否则定义T类型的变量。

template <int flag, typename T, typename U>
 struct Select  
 {
  typedef U Result;
 }; 
 template <typename T, typename U>
 struct Select<0, T, U>
 {
  typedef T Result;
 };

测试代码:

Select<Conversion<B,A>::exists,B,A>::Result type;

type的类型是A;B不再继承与A,则type类型是B。


相关文章
|
存储 算法 安全
【软件设计师备考 专题 】数据操作(集合运算和关系运算)(一)
【软件设计师备考 专题 】数据操作(集合运算和关系运算)
105 0
|
XML JavaScript 前端开发
JavaWeb基础4——HTML,JavaScript&CSS
HTML,JavaScript&CSS、元素、标签、css 选择器、属性、JavaScript基础语法、JavaScript对象、BOM浏览器对象模型、DOM文档对象模型、事件监听、正则对象RegExp/ES6
JavaWeb基础4——HTML,JavaScript&CSS
|
安全 Go 数据安全/隐私保护
Flutter开发笔记:Flutter路由技术
Flutter开发笔记:Flutter路由技术
1427 0
|
Java Nacos 开发者
Java从入门到精通:4.2.1学习新技术与框架——以Spring Boot和Spring Cloud Alibaba为例
Java从入门到精通:4.2.1学习新技术与框架——以Spring Boot和Spring Cloud Alibaba为例
224 1
|
网络安全 Docker 容器
modelscope-funasr部署后,但是无法通过html链接,是为什么呀?
在虚拟机上成功部署了Docker化的modelscope-funasr服务,日志显示初始化正常。防火墙已关闭,但尝试通过HTML页面访问时连接失败。
|
SQL 存储 数据可视化
sql学习数据库
SQL(Structured Query Language)是用于管理关系型数据库的标准编程语言。学习SQL数据库涉及理解数据库的基本概念、SQL语言的组成以及如何使用SQL进行数据的查询、操作和处理
1580 0
|
11月前
|
安全 数据安全/隐私保护 UED
看似不起眼的权限功能,如何成就信息安全?
在远程办公和在线协作普及的今天,企业的协作工具选择不仅要考虑功能和体验,安全性尤其是访问权限控制也至关重要。访问权限控制通过精细化管理,确保数据安全,提升团队效率,满足行业合规要求。通过多层次权限设置与加密技术,有效防止内部信息泄露,提高工作效率,确保操作透明,成为远程办公时代的可靠选择。
|
机器学习/深度学习 人工智能 监控
一文读懂deepSpeed:深度学习训练的并行化
DeepSpeed 是由微软开发的开源深度学习优化库,旨在提高大规模模型训练的效率和可扩展性。通过创新的并行化策略、内存优化技术(如 ZeRO)及混合精度训练,DeepSpeed 显著提升了训练速度并降低了资源需求。它支持多种并行方法,包括数据并行、模型并行和流水线并行,同时与 PyTorch 等主流框架无缝集成,提供了易用的 API 和丰富的文档支持。DeepSpeed 不仅大幅减少了内存占用,还通过自动混合精度训练提高了计算效率,降低了能耗。其开源特性促进了 AI 行业的整体进步,使得更多研究者和开发者能够利用先进优化技术,推动了 AI 在各个领域的广泛应用。
|
JavaScript 数据安全/隐私保护
vue如何实现页面的权限控制?
vue如何实现页面的权限控制?
407 0
|
前端开发
css文字环绕png图片
css文字环绕png图片
192 1