编译时断言

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

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

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

 

None.gif#include<iostream>
None.gif#include "boost/type_traits.hpp"
None.gif#include "boost/static_assert.hpp"
None.giftemplate <typename T>
None.gif class only_compatible_with_integral_types
ExpandedBlockStart.gif {
InBlock.gifBOOST_STATIC_ASSERT(boost::is_integral<T>::value);
ExpandedBlockEnd.gif};


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值