浅谈C++物理设计:实用宏
为了提高代码的表现力,规范中使用了一部分实用的宏定义。
// base/Default.h
#ifndef GKOQWPRT_1038935_NCVBNMZHJS_8909603
#define GKOQWPRT_1038935_NCVBNMZHJS_8909603namespace details
{template <typename T>struct DefaultValue{static T value(){return T();}};template <typename T>struct DefaultValue<T*>{static T* value(){return 0;}};template <typename T>struct DefaultValue<const T*>{static T* value(){return 0;}};template <>struct DefaultValue<void>{static void value(){}};
}#define DEFAULT(type, method) \virtual type method { return ::details::DefaultValue<type>::value(); }#endif
DEFAULT
对于定义空实现的virtual
函数非常方便。需要注意的是,所有计算都是发生在编译时的。
// base/Keywords.h
#ifndef H16274882_9153_4DB2_A2E2_F23D4CCB9381
#define H16274882_9153_4DB2_A2E2_F23D4CCB9381#include "base/Config.h"
#include "base/Default.h"#define ABSTRACT(...) virtual __VA_ARGS__ = 0#if __SUPPORT_VIRTUAL_OVERRIDE
# define OVERRIDE(...) virtual __VA_ARGS__ override
#else
# define OVERRIDE(...) virtual __VA_ARGS__
#endif#define EXTENDS(...) , ##__VA_ARGS__
#define IMPLEMENTS(...) EXTENDS(__VA_ARGS__)#endif
Config.h
提供了编译器支持C++11
特性的配置信息。ABSTRACT, OVERRIDE, EXTENDS, IMPLEMENTS
等关键字,使得Java
程序员也能看懂C++
的代码,也极大地改善了C++
的表现力。
// base/Role.h
#ifndef HF95EF112_D6C6_4DB0_8C1A_BE5A6CF8E3F1
#define HF95EF112_D6C6_4DB0_8C1A_BE5A6CF8E3F1
#include <base/Keywords.h>namespace details
{template <typename T>struct Role{virtual ~Role() {}};
}#define DEFINE_ROLE(type) struct type : ::details::Role<type>#endif
通过DEFINE_ROLE
的宏定义来实现对接口的定义,从而可以消除子类对虚拟析构函数的重复实现。
浅谈C++物理设计:实用宏相关推荐
- 浅谈jQuery Mobile设计思想
来自51CTO技术社区:http://mobile.51cto.com/others-288591.htm jQuery Mobile设计思想是本文要介绍的内容,主要是来了解jQuery Mobile ...
- 关于密码的那些事儿—浅谈密码的设计与管理
这是整理于2011年底的一份报告材料. 介绍1.背景 2011年底,国内遭遇网络安全的"崩盘".从CSDN用户数据被爆库,到天涯用户信息被刷库,到众多社交网站.论坛用户数据被拖库, ...
- 深入浅谈,CPU设计原理
首先,声明这是一篇转载文,这篇文章是,从卡饭论坛 看到的一篇文章<深入浅谈,CPU设计原理>,是一篇连载,文章,卡饭论坛,是我高中的时候,经常去的论坛,里面有很多好的文章,推荐给大家.也许 ...
- 计算机辅助药物设计 中药,浅谈计算机辅助药物设计在中药研究中的应用(1).pdf...
文档介绍: · 前沿进展· 浅谈计算机辅助药物设计在中药研究中的应用巴真真, 于巍巍摇摇作者单位: 圆缘远远园猿山东省滨州市,滨州职业学院医疗学院摇摇[摘要]摇计算机辅助药物设计( 悦粤阅阅)的理论和 ...
- 浅谈“领域驱动设计”
Eric Evans所著的<领域驱动设计>(Domain-Driven Design:通常简称为"DDD")一书可以说是经典中的经典,虽然"领域"的 ...
- Python 基于python+mysql浅谈redis缓存设计与数据库关联数据处理
基于python+mysql浅谈redis缓存设计与数据库关联数据处理 by:授客 QQ:1033553122 测试环境 redis-3.0.7 CentOS 6.5-x86_64 python 3 ...
- python文本框与数据库的关联_Python 基于python+mysql浅谈redis缓存设计与数据库关联数据处理...
基于python+mysql浅谈redis缓存设计与数据库关联数据处理 by:授客 QQ:1033553122 测试环境 redis-3.0.7 CentOS 6.5-x86_64 python 3. ...
- 数字化时代 需要利用计算机辅助,浅谈计算机辅助工业设计中的人机交互
浅谈计算机辅助工业设计中的人机交互 论文关键词:工业设计 计算机辅助工业设计 人机交互 论文摘要:计算机辅助工业设计是工业设计未来的发展方向,本文从工业设计及计算机辅助工业设计的一般含义出发,探究计算 ...
- 浅谈网络游戏的设计——服务器端编程
浅谈网络游戏的设计--服务器端编程 本游戏服务器端操作系统采用UNIX,因为UNIX是标准的服务器操作系统,可保证网络游戏的稳定性.因此,以下所有的编程都将针对UNIX进行. 服务器端的整体构架如下: ...
最新文章
- PMP知识点(四、进度管理)
- Github 大牛封装 Python 代码,实现自动发送邮件只需三行代码
- 【Spring Cloud】Redis缓存接入监控、运维平台CacheCloud
- 特斯拉股价周五收盘下跌7.38% 此前公布第三季度交付量创新高
- amd锐龙笔记本cpu怎么样_AMD的锐龙处理器怎么样?AMD的市占率高吗?
- 汉诺塔问题的求解与分析
- python 协程进阶
- Newtonsoft 六个超简单又实用的特性【上下篇】
- JAVA导出txt文件
- IDEA破解码(至2099)
- win10系统计算机如何分盘,windows10怎么分盘
- 使用GeoGebra绘制三角形的外接圆和内切圆
- 时间序列 预处理 python_时间序列算法理论及python实现(1-算法理论部分)
- nyoj 海岛争霸(Floyd最短路径)
- 图像四则运算(加减乘除)
- WLGK-51单片机接口技术基础实验 ——LED闪烁灯
- Python识别图像中的文字、数字等
- vue后台管理系统(通用模板)
- 软考-软件设计师】(二). 操作系统
- 学计算机必需要好电脑吗,大学计算机学习心得体会-20210523235937.docx-原创力文档...
热门文章
- NOI 题库 6264
- [OpenGL]自己写的加载位图并转换成纹理的两个函数
- 1.5 欠拟合和过拟合
- ORB_SLAM 编译过程详解
- ken沈oracle,甲骨文宣布推出Oracle商务软件
- C++ 常见错误(02) —— 将dll(用c++写的)处理的结果展示在界面上
- python随机生成中文句子_python – 如何使用NLTK从诱导语法中生成句子?
- oracle外部表迁移,海量数据迁移之外部表并行抽取
- java构造器 权限_一文搞懂Java的 构造方法 和 访问权限
- python 计算曲线面积_微积分到底有多神?能完成多少不可思议,难以测量的计算?他简直强大的让人害怕!...