青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
金慶的專欄
C++博客
::
首頁(yè)
::
新隨筆
::
聯(lián)系
::
聚合
::
管理
::
423 隨筆 :: 0 文章 :: 454 評(píng)論 :: 0 Trackbacks
公告
我的隨筆
我的評(píng)論
我參與的隨筆
留言簿
(12)
給我留言
查看公開(kāi)留言
查看私人留言
隨筆分類(lèi)
(502)
1. C/C++(166)
(rss)
2. 網(wǎng)游開(kāi)發(fā)(108)
(rss)
3. Golang(20)
(rss)
4. Linux/Unix(30)
(rss)
5. 軟工與管理(44)
(rss)
6. Python(23)
(rss)
7. Erlang(18)
(rss)
8. Rust(16)
(rss)
9. 其它(77)
(rss)
隨筆檔案
(423)
2023年1月 (1)
2022年11月 (1)
2022年10月 (2)
2022年9月 (1)
2022年4月 (6)
2022年1月 (2)
2021年12月 (4)
2021年11月 (6)
2021年10月 (2)
2021年9月 (2)
2021年8月 (7)
2021年7月 (2)
2021年5月 (2)
2021年3月 (1)
2021年2月 (2)
2021年1月 (1)
2020年12月 (1)
2020年10月 (1)
2020年9月 (5)
2020年8月 (1)
2020年7月 (1)
2020年6月 (1)
2020年4月 (2)
2020年3月 (3)
2020年2月 (3)
2020年1月 (1)
2019年12月 (1)
2019年9月 (2)
2019年4月 (2)
2019年1月 (1)
2018年12月 (1)
2018年11月 (3)
2018年10月 (1)
2018年9月 (3)
2018年8月 (3)
2018年7月 (2)
2018年6月 (4)
2018年5月 (4)
2018年4月 (4)
2018年3月 (1)
2018年1月 (2)
2017年12月 (2)
2017年11月 (3)
2017年10月 (3)
2017年8月 (7)
2017年7月 (1)
2017年6月 (1)
2017年5月 (3)
2017年4月 (3)
2017年3月 (3)
2017年2月 (2)
2017年1月 (2)
2016年12月 (5)
2016年11月 (2)
2016年10月 (2)
2016年9月 (1)
2016年8月 (6)
2016年7月 (3)
2016年6月 (2)
2016年5月 (4)
2016年4月 (2)
2016年3月 (2)
2016年1月 (3)
2015年12月 (2)
2015年11月 (2)
2015年10月 (1)
2015年8月 (2)
2015年7月 (1)
2015年6月 (1)
2015年5月 (4)
2015年4月 (3)
2015年3月 (4)
2015年2月 (5)
2015年1月 (4)
2014年12月 (3)
2014年11月 (3)
2014年10月 (2)
2014年9月 (3)
2014年8月 (1)
2014年4月 (4)
2014年3月 (1)
2014年2月 (4)
2014年1月 (5)
2013年12月 (5)
2013年11月 (5)
2013年9月 (2)
2013年8月 (2)
2013年7月 (2)
2013年6月 (2)
2013年5月 (1)
2013年1月 (2)
2012年12月 (1)
2012年11月 (1)
2012年9月 (1)
2012年8月 (3)
2012年7月 (2)
2012年6月 (1)
2012年4月 (3)
2012年3月 (2)
2012年2月 (3)
2012年1月 (2)
2011年11月 (2)
2011年10月 (3)
2011年9月 (2)
2011年8月 (2)
2011年7月 (3)
2011年6月 (2)
2011年5月 (3)
2011年1月 (2)
2010年12月 (1)
2010年11月 (2)
2010年10月 (2)
2010年9月 (3)
2010年8月 (2)
2010年7月 (3)
2010年6月 (1)
2010年5月 (3)
2010年4月 (3)
2010年3月 (5)
2010年2月 (4)
2010年1月 (4)
2009年12月 (2)
2009年11月 (3)
2009年10月 (4)
2009年9月 (3)
2009年8月 (2)
2009年7月 (4)
2009年6月 (1)
2009年5月 (3)
2009年4月 (4)
2009年3月 (2)
2009年2月 (5)
2009年1月 (1)
2008年12月 (7)
2008年11月 (4)
2008年10月 (1)
2008年9月 (3)
2008年8月 (4)
2008年7月 (3)
2008年6月 (4)
2008年5月 (6)
2008年4月 (7)
2008年3月 (6)
2008年1月 (5)
2007年12月 (7)
2007年11月 (4)
2007年10月 (5)
2007年9月 (6)
2007年8月 (8)
2007年7月 (5)
相冊(cè)
公告照片
搜索
積分與排名
積分 - 662250
排名 - 25
最新評(píng)論
1.?re: boost::asio::spawn 將一統(tǒng)C++網(wǎng)絡(luò)庫(kù)
asio 成為C++首選網(wǎng)絡(luò)庫(kù)
--linda
2.?re: log4cxx中文輸出錯(cuò)誤補(bǔ)丁
評(píng)論內(nèi)容較長(zhǎng),點(diǎn)擊標(biāo)題查看
--金慶
3.?re: mingw編譯OrzNet
能發(fā)送一個(gè)mingw編譯好的OrzNet庫(kù)給我嗎? liuweiqcxy@163.com
謝謝!
--劉威
4.?re: log4cxx中文輸出錯(cuò)誤補(bǔ)丁
評(píng)論內(nèi)容較長(zhǎng),點(diǎn)擊標(biāo)題查看
--bigbad
5.?re: log4cxx中文輸出錯(cuò)誤補(bǔ)丁
評(píng)論內(nèi)容較長(zhǎng),點(diǎn)擊標(biāo)題查看
--bigbad
閱讀排行榜
1.?"multiple definition of" 錯(cuò)誤(11074)
2.?SVN中邪惡的replace(11000)
3.?VS2005編譯libevent(10456)
4.?混音算法的學(xué)習(xí)與研究(10258)
5.?C調(diào)用lua腳本的效率測(cè)試(9025)
評(píng)論排行榜
1.?VC6正在被拋棄(35)
2.?VS2005編譯libevent(21)
3.?"multiple definition of" 錯(cuò)誤(18)
4.?C++引用優(yōu)于指針(17)
5.?ACE與ASIO之間關(guān)于Socket編程的比較(16)
boost::static_assert
原文地址:
http://www.smth.edu.cn/bbsanc.php?path=%2Fgroups%2Fdevelop.faq%2FProgramming%2Flanguages%2Fc_cpp%2Fboost%2FM.1021441404.O0
發(fā)信人: flier (小海 (:好日子不多了:)), 信區(qū): Programming
標(biāo) 題: boost::static_assert
發(fā)信站: BBS 水木清華站 (Wed May 15 13:43:35 2002)
boost::static_assert
BOOST_STATIC_ASSERT的
使用
BOOST_STATIC_ASSERT是一個(gè)簡(jiǎn)單但常用的宏,顧名思義起到編譯期
斷言的功效,可以通過(guò)它,在編譯時(shí)對(duì)開(kāi)發(fā)環(huán)境以及類(lèi)型定義進(jìn)行檢查。
此類(lèi)型檢測(cè)對(duì)程序運(yùn)行時(shí)無(wú)任何效率和空間上的影響。
例如在namespace中加入
namespace my_conditions {
BOOST_STATIC_ASSERT(sizeof(int) * CHAR_BIT >= 32);
BOOST_STATIC_ASSERT(WCHAR_MIN >= 0);
} // namespace my_conditions
確保int類(lèi)型至少32位,wchar_t類(lèi)型為unsigned。
也可以在模板函數(shù)中檢測(cè)入口參數(shù)的類(lèi)型是否符合要求
template <class RandomAccessIterator >
RandomAccessIterator foo(RandomAccessIterator from, RandomAccessIterator to)
{
// this template can only be used with
// random access iterators...
typedef typename std::iterator_traits
< RandomAccessIterator >::iterator_category cat;
BOOST_STATIC_ASSERT((boost::is_convertible
<cat, const std::random_access_iterator_tag&>::value));
//
// detail goes here...
return from;
}
確保foo函數(shù)的輸入迭代子符合random access iterator的concept
此外還可以在模板類(lèi)里面驗(yàn)證模板參數(shù)
template <class UnsignedInt>
class myclass
{
private:
BOOST_STATIC_ASSERT(sizeof(UnsignedInt) * CHAR_BIT >= 16);
BOOST_STATIC_ASSERT(std::numeric_limits<UnsignedInt>::is_specialized
&& std::numeric_limits<UnsignedInt>::is_integer
&& !std::numeric_limits<UnsignedInt>::is_signed);
public:
/* details here */
};
通過(guò)以上示例,我們可以總結(jié)出BOOST_STATIC_ASSERT的基本使用規(guī)律
首先是全局上對(duì)編譯環(huán)境進(jìn)行檢測(cè),看是否符合設(shè)計(jì)開(kāi)發(fā)時(shí)的假定,這對(duì)程序的
可移植性有很大幫助。其次是在模板類(lèi)、模板函數(shù)中,對(duì)作為模板參數(shù)的類(lèi)型
進(jìn)行檢測(cè),驗(yàn)證其是否符合設(shè)計(jì)時(shí)假設(shè)。最后是能夠?qū)p中的concept概念貫徹
到代碼中,使代碼強(qiáng)制性與設(shè)計(jì)同步,并增強(qiáng)代碼可讀性。
BOOST_STATIC_ASSERT的
實(shí)現(xiàn)
在實(shí)現(xiàn)上,BOOST_STATIC_ASSERT宏利用c++規(guī)范中,對(duì)不完整類(lèi)型
即不可實(shí)例化的類(lèi)型,在對(duì)其進(jìn)行sizeof運(yùn)算時(shí)編譯錯(cuò)誤的特性,完成功能
大概的簡(jiǎn)化代碼如下
template <bool x> struct STATIC_ASSERTION_FAILURE;
template <> struct STATIC_ASSERTION_FAILURE<true>{};
template<int x> struct static_assert_test{};
#define BOOST_STATIC_ASSERT(B) \
typedef static_assert_test<sizeof(STATIC_ASSERTION_FAILURE<B> > \
boost_static_assert_typedef_ ## __LINE__
注意為了能夠使用多個(gè)BOOST_STATIC_ASSERT,在類(lèi)型命名時(shí)加入了
行號(hào)以區(qū)別。對(duì)namespace而言,因?yàn)橥籲amespace可能分布在多個(gè)不同的
頭文件中,而不同頭文件中可能在同一行使用BOOST_STATIC_ASSERT檢測(cè),
所以必須用一個(gè)namespace把斷言檢測(cè)隔離開(kāi),如上面例子所示。
此外,對(duì)于VC來(lái)說(shuō),在使用/ZI參數(shù)時(shí),__LINE__宏會(huì)發(fā)生錯(cuò)誤,
(參見(jiàn)MSDN中Q199057錯(cuò)誤),好在VC會(huì)忽略typedef重復(fù)定義。
對(duì)某些不支持typedef此類(lèi)特性的編譯器,boost提供了使用enum的替代方案
附:boost/static_assert.hpp
// (C) Copyright John Maddock 2000.
// Permission to copy, use, modify, sell and
// distribute this software is granted provided this copyright notice appears
// in all copies. This software is provided "as is" without express or implied
// warranty, and with no claim as to its suitability for any purpose.
// See http://www.boost.org for most recent version including documentation.
/*
Revision history:
02 August 2000
Initial version.
*/
#ifndef BOOST_STATIC_ASSERT_HPP
#define BOOST_STATIC_ASSERT_HPP
#include <boost/config.hpp>
#ifdef __BORLANDC__
//
// workaround for buggy integral-constant expression support:
#define BOOST_BUGGY_INTEGRAL_CONSTANT_EXPRESSIONS
#endif
namespace boost{
// HP aCC cannot deal with missing names for template value parameters
template <bool x> struct STATIC_ASSERTION_FAILURE;
template <> struct STATIC_ASSERTION_FAILURE<true>{};
// HP aCC cannot deal with missing names for template value parameters
template<int x> struct static_assert_test{};
}
//
// Implicit instantiation requires that all member declarations be
// instantiated, but that the definitions are *not* instantiated.
//
// It's not particularly clear how this applies to enum's or typedefs;
// both are described as declarations [7.1.3] and [7.2] in the standard,
// however some compilers use "delayed evaluation" of one or more of
// these when implicitly instantiating templates. We use typedef declarations
// by default, but try defining BOOST_USE_ENUM_STATIC_ASSERT if the enum
// version gets better results from your compiler...
//
// Implementation:
// Both of these versions rely on sizeof(incomplete_type) generating an error
// message containing the name of the incomplete type. We use
// "STATIC_ASSERTION_FAILURE" as the type name here to generate
// an eye catching error message. The result of the sizeof expression is either
// used as an enum initialiser, or as a template argument depending which version
// is in use...
// Note that the argument to the assert is explicitly cast to bool using old-
// style casts: too many compilers currently have problems with static_cast
// when used inside integral constant expressions.
//
#if !defined(BOOST_BUGGY_INTEGRAL_CONSTANT_EXPRESSIONS) && !defined(__MWERKS__)
#ifndef BOOST_MSVC
#define BOOST_STATIC_ASSERT( B ) \
typedef ::boost::static_assert_test<\
sizeof(::boost::STATIC_ASSERTION_FAILURE< (bool)( B ) >)>\
BOOST_JOIN(boost_static_assert_typedef_, __LINE__)
#else
// __LINE__ macro broken when -ZI is used see Q199057
// fortunately MSVC ignores duplicate typedef's.
#define BOOST_STATIC_ASSERT( B ) \
typedef ::boost::static_assert_test<\
sizeof(::boost::STATIC_ASSERTION_FAILURE< (bool)( B ) >)\
> boost_static_assert_typedef_
#endif
#else
// alternative enum based implementation:
#define BOOST_STATIC_ASSERT( B ) \
enum { BOOST_JOIN(boost_static_assert_enum_, __LINE__) \
= sizeof(::boost::STATIC_ASSERTION_FAILURE< (bool)( B ) >) }
#endif
#endif // BOOST_STATIC_ASSERT_HPP
--
. 生命的意義在于 /\ ____\ /\_ \ /\_\ .
. 希望 \ \ \___/_\/\ \ \/_/__ __ _ _★ .
. 工作 \ \ ____\\ \ \ /\ \ /'__`\ /\`'_\ .
. 愛(ài)你的人 \ \ \___/ \ \ \___\ \ \/\ __//\ \ \/ .
. 和你愛(ài)的人 \ \___\ \ \_____\ \__\ \____\ \ \_\ .
. …… \/___/ \/_____/\/__/\/____/ \/_/ @126.com .
※ 來(lái)源:·BBS 水木清華站 bbs.edu.cn·[FROM: 202.114.32.225]
posted on 2007-12-14 10:02
金慶
閱讀(1044)
評(píng)論(1)
編輯
收藏
引用
所屬分類(lèi):
1. C/C++
評(píng)論
#
re: boost::static_assert
2008-01-05 21:26
螞蟻終結(jié)者
不錯(cuò),雖然沒(méi)用過(guò)。卻值的學(xué)習(xí)
回復(fù)
更多評(píng)論
刷新評(píng)論列表
只有注冊(cè)用戶
登錄
后才能發(fā)表評(píng)論。
相關(guān)文章:
How are dtLinks created in NavMesh
C++ parameter passing rules
Naming Conventions for Accessors
Visual Studio 2019 Compiler Hangs
Fbx File Format Identifier
查找內(nèi)存錯(cuò)誤
std::thread 中的異常會(huì)丟失調(diào)用棧
用賦值代替 protobuf CopyFrom()
vs2017 linux 編譯輸出改成 vs 格式
為 LiteIDE 添加選中標(biāo)記
網(wǎng)站導(dǎo)航:
博客園
IT新聞
BlogJava
博問(wèn)
Chat2DB
管理
Powered by:
C++博客
Copyright © 金慶
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
欧美一级日韩一级
|
久久精品国产96久久久香蕉
|
欧美日韩精品久久久
|
蜜臀久久99精品久久久久久9
|
久久精品在这里
|
久久综合国产精品
|
欧美精品久久久久久久免费观看
|
欧美人与性动交α欧美精品济南到
|
欧美久久久久久久久
|
国产精品日韩欧美大师
|
国产欧美一区二区色老头
|
亚洲欧美国产视频
|
欧美在线视频免费观看
|
美日韩在线观看
|
国产精品hd
|
在线欧美日韩
|
亚洲一区综合
|
久久免费的精品国产v∧
|
欧美搞黄网站
|
亚洲男人的天堂在线
|
久久人人爽人人爽爽久久
|
欧美日韩国产在线
|
黑人一区二区
|
亚洲一二三区精品
|
另类酷文…触手系列精品集v1小说
|
亚洲第一精品夜夜躁人人躁
|
亚洲精品亚洲人成人网
|
久久电影一区
|
国产精品麻豆va在线播放
|
黄色一区三区
|
亚洲午夜激情免费视频
|
久久在线91
|
亚洲女人天堂av
|
欧美日韩精品综合在线
|
一区二区三区在线不卡
|
午夜精品久久久99热福利
|
欧美不卡视频
|
亚洲欧美偷拍卡通变态
|
欧美精品久久久久久久久老牛影院
|
国产亚洲一区在线
|
亚洲女性裸体视频
|
亚洲国产高清自拍
|
亚洲一区三区电影在线观看
|
欧美大尺度在线
|
性一交一乱一区二区洋洋av
|
欧美另类极品videosbest最新版本
|
国产精品一区二区三区久久
|
99精品视频免费
|
亚洲第一页自拍
|
久久综合图片
|
黄色成人精品网站
|
欧美亚洲视频在线看网址
|
亚洲美女少妇无套啪啪呻吟
|
免费成人黄色片
|
精品成人久久
|
久久综合网色—综合色88
|
亚洲一区二区三区免费观看
|
欧美午夜免费
|
午夜精彩视频在线观看不卡
|
亚洲一区视频在线
|
国产精品亚洲一区
|
午夜精彩视频在线观看不卡
|
亚洲一区3d动漫同人无遮挡
|
欧美三级电影大全
|
亚洲免费影视
|
亚洲影院高清在线
|
国产一区二区三区精品久久久
|
欧美伊人精品成人久久综合97
|
久久免费高清视频
|
在线电影欧美日韩一区二区私密
|
久久精品在线播放
|
久久精品欧美
|
亚洲人人精品
|
日韩视频国产视频
|
欧美日韩综合在线
|
香蕉久久夜色
|
欧美尤物一区
|
亚洲国产99
|
亚洲激情影视
|
国产精品久久久久久久久久尿
|
亚洲欧美日韩国产一区二区
|
亚洲欧美日韩一区二区在线
|
国内在线观看一区二区三区
|
麻豆精品网站
|
欧美精品免费看
|
欧美一区二区三区免费大片
|
久久久91精品国产一区二区精品
|
久久在线视频在线
|
欧美大尺度在线
|
性欧美大战久久久久久久久
|
久久av一区二区三区漫画
|
亚洲精品久久视频
|
亚洲午夜久久久久久久久电影网
|
国产精品视频内
|
免费观看成人www动漫视频
|
欧美日本国产一区
|
久久久久久久一区二区三区
|
免播放器亚洲
|
欧美一级视频精品观看
|
麻豆成人在线
|
欧美一区二区三区免费观看视频
|
久久精品国产一区二区三
|
国产精品99久久久久久久久久久久
|
99av国产精品欲麻豆
|
国产欧美日韩不卡
|
亚洲日本视频
|
在线观看日韩精品
|
亚洲主播在线播放
|
洋洋av久久久久久久一区
|
欧美在线关看
|
欧美一区二区日韩
|
欧美人体xx
|
欧美激情精品
|
一区二区三区在线视频观看
|
亚洲视频二区
|
99国产精品久久久久老师
|
久久精品视频导航
|
欧美一区视频在线
|
国产精品日韩在线播放
|
亚洲精品在线看
|
亚洲精品美女在线观看播放
|
欧美有码视频
|
久久国产精品99国产
|
欧美午夜免费
|
中文久久乱码一区二区
|
制服丝袜激情欧洲亚洲
|
久久久国产一区二区
|
欧美一级播放
|
国产精品一区亚洲
|
国产精品99久久久久久www
|
一区二区三区鲁丝不卡
|
欧美精品亚洲一区二区在线播放
|
欧美激情精品久久久久久大尺度
|
亚洲人体偷拍
|
六月婷婷久久
|
欧美激情成人在线
|
黄色资源网久久资源365
|
欧美在线视频播放
|
久久深夜福利免费观看
|
亚洲第一页自拍
|
久久综合伊人
|
亚洲国产影院
|
亚洲视频一区二区在线观看
|
国产精品第一区
|
亚洲综合三区
|
久久躁日日躁aaaaxxxx
|
在线成人免费观看
|
免费成人高清在线视频
|
亚洲国产一区在线
|
在线综合视频
|
国产情人节一区
|
久久久久女教师免费一区
|
免费成人在线观看视频
|
最近中文字幕日韩精品
|
欧美久久久久久蜜桃
|
一区二区冒白浆视频
|
久久精品日韩一区二区三区
|
在线观看视频一区二区欧美日韩
|
久久综合色天天久久综合图片
|
亚洲欧洲一区二区三区
|
亚洲欧美日韩一区二区三区在线观看
|
国产精品影音先锋
|
猛男gaygay欧美视频
|
亚洲淫性视频
|
狠狠色丁香久久综合频道
|
麻豆精品一区二区综合av
|
欧美国产极速在线
|
亚洲一区二区三区在线观看视频
|
国产视频欧美
|
欧美高清一区二区
|
亚洲一二三级电影
|
亚洲大片免费看
|
亚洲自拍三区
|
1024成人
|
欧美视频中文在线看
|
久久这里只有精品视频首页
|
日韩午夜精品
|
麻豆精品一区二区av白丝在线
|
一区二区欧美在线观看
|
国产一区久久
|
欧美视频精品在线
|
久久精品国产第一区二区三区最新章节
|
久久成人综合视频
|
亚洲免费成人av
|
麻豆精品视频
|
亚洲欧美日韩天堂
|
99综合在线
|
亚洲国产精品一区
|
国产精品二区在线
|
欧美多人爱爱视频网站
|
久久高清一区
|
亚洲一区二区三区激情
|
亚洲盗摄视频
|
蜜桃av一区二区三区
|
欧美一级播放
|
亚洲一区日韩
|
亚洲一区二区黄
|
夜色激情一区二区
|
亚洲精品一区二区三区不
|
在线观看日韩精品
|