CG@CPPBLOG

/*=========================================*/
随笔 - 76, 文章 - 39, 评论 - 137, 引用 - 0
数据加载中……

《C++设计新思维》读书笔记(六)


 
2.1 编译期断言

有时候,我们的断言其实在编译时就可以判断真假,于是有编译时断言。例如如此实现:

1 #define STATIC_CHECK(expr) {char unnamed[(expr)?1:0];}


如果条件为假,编译器因大小为0的数组非法而报错。但出错信息显然没有实际意义,可以改进,使用模板:

1 template<bool> struct CompileTimeError;
2 template<> strcut CompileTimeError<true>{};
3 #define STATIC_CHECK(expr) (CompileTimeError<(expr)!=0>())


如果你试着具现化CompileTimeError<false>,编译器会提示“Undefined specialization CompileTimeError<false>”。
(进一步改进从略)

posted on 2007-12-17 22:10 cuigang 阅读(262) 评论(0)  编辑 收藏 引用 所属分类: 《C++设计新思维》读书笔记


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理