Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 硬件指南 > 应用技巧 > c++设计新思维第二章读书笔记一:编译时assert的实现(三)
【标  题】:c++设计新思维第二章读书笔记一:编译时assert的实现(三)
【关键字】:c++,assert
【来  源】:BLOG.YESKY.NET

c++设计新思维第二章读书笔记一:编译时assert的实现(三)

Your Ad Here

   一种更好的,能直接给出断言意图的编译时assert的实现像这样.它的好处在于能够定制出错信息.
 
#include <assert.h>
#include <stdio.h>

//定制出错信息
//这种编译时assert的原理是:利用模板偏特化的特性使得只有bool模板为true时才能编译通过.

 

template <bool> struct CompileTimeChecker
{
 CompileTimeChecker(...);//表示缺省特性是在其构造函数中可接任意型别作为参数
};

template <> struct CompileTimeChecker<false>{ };//覆盖缺省特性,从而不能在构造函数中像缺省特性那样可接受任意型别作为参数
#define STATIC_CHECK(expr,msg)\
 {\
  class ERROR_##msg{};\
  (void)sizeof(CompileTimeChecker<(expr)>(ERROR_##msg()));\
 }


 
template <class To,class From>
To safe_static_cast(From from)
{
 STATIC_CHECK(sizeof(From) <= sizeof(To),Destination_Type_Too_Narrorow);
 return static_cast<To>(from);
}

int main()
{
 int i=0;
 double j =0.0;
 double p1 = safe_static_cast<double,int>(i);//直接指定From和To的型别
 double p2 = safe_static_cast<double>(i);//编译器可根据i的型别,推导From的型别,更灵活
 int p3 =safe_static_cast<int>(j);//出错

 printf("OK\n");
 return 0;
}

WAP Web Browser 让您的无线生活更简单:【上一篇】
技巧:让系统关机时自动备份文件的脚本:【下一篇】
【相关文章】
  • c++设计新思维第二章读书笔记二:Int2Type的妙用
  • c++设计新思维第二章读书笔记三:编译期间侦测型别间的可转换性!
  • Javaer 双修C++的key point
  • C++ 完全不完全资源导引--书籍篇
  • Assert使用-初级
  • C&C++标准库学习资料[在线]
  • 2005-10-10 Borland 发布了Delphi 2006 与 C++ Builder 2006
  • 重学C++(1)——几个常常忽视的简单的类的问题
  • C++编程修养
  • 探索C++的底层机制
  • 【随机文章】
  • 数据库连接在web.config中的配置
  • TCP/IP学习中
  • CorelDRAW 12循序渐进(4)-笔刷与色彩填充
  • 教你设置需要密码访问的Windows XP共享文件夹
  • Fireworks打造金属效果
  • eclipse中cvs标记注解
  • 项目管理中的“三个代表”(下)
  • SAP与IBM合推DB2优化版
  • C++ 中不能重载的运算符
  • 如何在VB6.0中创建和使用文本资源文件
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 bbb软讯网络 All Rigths Reserved.