为了提高代码的表现力,规范中使用了一部分实用的宏定义。

// 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++物理设计:实用宏相关推荐

  1. 浅谈jQuery Mobile设计思想

    来自51CTO技术社区:http://mobile.51cto.com/others-288591.htm jQuery Mobile设计思想是本文要介绍的内容,主要是来了解jQuery Mobile ...

  2. 关于密码的那些事儿—浅谈密码的设计与管理

    这是整理于2011年底的一份报告材料. 介绍1.背景 2011年底,国内遭遇网络安全的"崩盘".从CSDN用户数据被爆库,到天涯用户信息被刷库,到众多社交网站.论坛用户数据被拖库, ...

  3. 深入浅谈,CPU设计原理

    首先,声明这是一篇转载文,这篇文章是,从卡饭论坛 看到的一篇文章<深入浅谈,CPU设计原理>,是一篇连载,文章,卡饭论坛,是我高中的时候,经常去的论坛,里面有很多好的文章,推荐给大家.也许 ...

  4. 计算机辅助药物设计 中药,浅谈计算机辅助药物设计在中药研究中的应用(1).pdf...

    文档介绍: · 前沿进展· 浅谈计算机辅助药物设计在中药研究中的应用巴真真, 于巍巍摇摇作者单位: 圆缘远远园猿山东省滨州市,滨州职业学院医疗学院摇摇[摘要]摇计算机辅助药物设计( 悦粤阅阅)的理论和 ...

  5. 浅谈“领域驱动设计”

    Eric Evans所著的<领域驱动设计>(Domain-Driven Design:通常简称为"DDD")一书可以说是经典中的经典,虽然"领域"的 ...

  6. Python 基于python+mysql浅谈redis缓存设计与数据库关联数据处理

    基于python+mysql浅谈redis缓存设计与数据库关联数据处理 by:授客  QQ:1033553122 测试环境 redis-3.0.7 CentOS 6.5-x86_64 python 3 ...

  7. python文本框与数据库的关联_Python 基于python+mysql浅谈redis缓存设计与数据库关联数据处理...

    基于python+mysql浅谈redis缓存设计与数据库关联数据处理 by:授客 QQ:1033553122 测试环境 redis-3.0.7 CentOS 6.5-x86_64 python 3. ...

  8. 数字化时代 需要利用计算机辅助,浅谈计算机辅助工业设计中的人机交互

    浅谈计算机辅助工业设计中的人机交互 论文关键词:工业设计 计算机辅助工业设计 人机交互 论文摘要:计算机辅助工业设计是工业设计未来的发展方向,本文从工业设计及计算机辅助工业设计的一般含义出发,探究计算 ...

  9. 浅谈网络游戏的设计——服务器端编程

    浅谈网络游戏的设计--服务器端编程 本游戏服务器端操作系统采用UNIX,因为UNIX是标准的服务器操作系统,可保证网络游戏的稳定性.因此,以下所有的编程都将针对UNIX进行. 服务器端的整体构架如下: ...

最新文章

  1. PMP知识点(四、进度管理)
  2. Github 大牛封装 Python 代码,实现自动发送邮件只需三行代码
  3. 【Spring Cloud】Redis缓存接入监控、运维平台CacheCloud
  4. 特斯拉股价周五收盘下跌7.38% 此前公布第三季度交付量创新高
  5. amd锐龙笔记本cpu怎么样_AMD的锐龙处理器怎么样?AMD的市占率高吗?
  6. 汉诺塔问题的求解与分析
  7. python 协程进阶
  8. Newtonsoft 六个超简单又实用的特性【上下篇】
  9. JAVA导出txt文件
  10. IDEA破解码(至2099)
  11. win10系统计算机如何分盘,windows10怎么分盘
  12. 使用GeoGebra绘制三角形的外接圆和内切圆
  13. 时间序列 预处理 python_时间序列算法理论及python实现(1-算法理论部分)
  14. nyoj 海岛争霸(Floyd最短路径)
  15. 图像四则运算(加减乘除)
  16. WLGK-51单片机接口技术基础实验 ——LED闪烁灯
  17. Python识别图像中的文字、数字等
  18. vue后台管理系统(通用模板)
  19. 软考-软件设计师】(二). 操作系统
  20. 学计算机必需要好电脑吗,大学计算机学习心得体会-20210523235937.docx-原创力文档...

热门文章

  1. NOI 题库 6264
  2. [OpenGL]自己写的加载位图并转换成纹理的两个函数
  3. 1.5 欠拟合和过拟合
  4. ORB_SLAM 编译过程详解
  5. ken沈oracle,甲骨文宣布推出Oracle商务软件
  6. C++ 常见错误(02) —— 将dll(用c++写的)处理的结果展示在界面上
  7. python随机生成中文句子_python – 如何使用NLTK从诱导语法中生成句子?
  8. oracle外部表迁移,海量数据迁移之外部表并行抽取
  9. java构造器 权限_一文搞懂Java的 构造方法 和 访问权限
  10. python 计算曲线面积_微积分到底有多神?能完成多少不可思议,难以测量的计算?他简直强大的让人害怕!...