牵着老婆满街逛

严以律己,宽以待人. 三思而后行.
GMail/GTalk: yanglinbo#google.com;
MSN/Email: tx7do#yahoo.com.cn;
QQ: 3 0 3 3 9 6 9 2 0 .

编译时断言

template <bool> struct TAssert;
template 
<> struct TAssert<true> {};
其使用办法是:
TAssert<false> __Assert;
如果模板参数特化为false则编译器会报错,这样实现了一个编译期的断言,而这个错误几乎在所有编译器上面的输出都是一致的,这个可是一个非常有用的特性啊。
当然了,因为是在编译期确定,所以传入的模板参数必须是常量才可以。
这个东西在boost里面有。
需要包含头文件:
#include <boost/static_assert.hpp>

可以像如下的一些应用:
void expects_ints_to_be_4_bytes() {  BOOST_STATIC_ASSERT(sizeof(int)==4);}

template <int i> void accepts_values_between_1_and_10() {  BOOST_STATIC_ASSERT(i>=1 && i<=10);}

 

#include<iostream>
#include 
"boost/type_traits.hpp"
#include 
"boost/static_assert.hpp"
template 
<typename T>
class only_compatible_with_integral_types
{
BOOST_STATIC_ASSERT(boost::is_integral
<T>::value);
}
;


最近我对template技术非常着迷,正好可以打发我郁闷的日子。虽然这项技术多用于库的构建上,在实际应用开发当中的实用价值不高,但是学习到了总归是好的。
boost里面几乎是最全面的应用了,毫无疑问,这么强大的基础库肯定是要毫无保留的去使用它,有点template技术深层次的积累,对于更好的使用boost终归是有益的。

posted on 2008-10-28 23:41 杨粼波 阅读(518) 评论(0)  编辑 收藏 引用


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