青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
金慶的專欄
C++博客
::
首頁
::
新隨筆
::
聯(lián)系
::
聚合
::
管理
::
423 隨筆 :: 0 文章 :: 454 評(píng)論 :: 0 Trackbacks
公告
我的隨筆
我的評(píng)論
我參與的隨筆
留言簿
(12)
給我留言
查看公開留言
查看私人留言
隨筆分類
(502)
1. C/C++(166)
(rss)
2. 網(wǎng)游開發(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è)
公告照片
搜索
積分與排名
積分 - 659884
排名 - 25
最新評(píng)論
1.?re: boost::asio::spawn 將一統(tǒng)C++網(wǎng)絡(luò)庫
asio 成為C++首選網(wǎng)絡(luò)庫
--linda
2.?re: log4cxx中文輸出錯(cuò)誤補(bǔ)丁
評(píng)論內(nèi)容較長,點(diǎn)擊標(biāo)題查看
--金慶
3.?re: mingw編譯OrzNet
能發(fā)送一個(gè)mingw編譯好的OrzNet庫給我嗎? liuweiqcxy@163.com
謝謝!
--劉威
4.?re: log4cxx中文輸出錯(cuò)誤補(bǔ)丁
評(píng)論內(nèi)容較長,點(diǎn)擊標(biāo)題查看
--bigbad
5.?re: log4cxx中文輸出錯(cuò)誤補(bǔ)丁
評(píng)論內(nèi)容較長,點(diǎn)擊標(biāo)題查看
--bigbad
閱讀排行榜
1.?"multiple definition of" 錯(cuò)誤(11060)
2.?SVN中邪惡的replace(10986)
3.?VS2005編譯libevent(10431)
4.?混音算法的學(xué)習(xí)與研究(10238)
5.?C調(diào)用lua腳本的效率測(cè)試(9020)
評(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)單但常用的宏,顧名思義起到編譯期
斷言的功效,可以通過它,在編譯時(shí)對(duì)開發(fā)環(huán)境以及類型定義進(jìn)行檢查。
此類型檢測(cè)對(duì)程序運(yùn)行時(shí)無任何效率和空間上的影響。
例如在namespace中加入
namespace my_conditions {
BOOST_STATIC_ASSERT(sizeof(int) * CHAR_BIT >= 32);
BOOST_STATIC_ASSERT(WCHAR_MIN >= 0);
} // namespace my_conditions
確保int類型至少32位,wchar_t類型為unsigned。
也可以在模板函數(shù)中檢測(cè)入口參數(shù)的類型是否符合要求
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
此外還可以在模板類里面驗(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 */
};
通過以上示例,我們可以總結(jié)出BOOST_STATIC_ASSERT的基本使用規(guī)律
首先是全局上對(duì)編譯環(huán)境進(jìn)行檢測(cè),看是否符合設(shè)計(jì)開發(fā)時(shí)的假定,這對(duì)程序的
可移植性有很大幫助。其次是在模板類、模板函數(shù)中,對(duì)作為模板參數(shù)的類型
進(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ì)不完整類型
即不可實(shí)例化的類型,在對(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,在類型命名時(shí)加入了
行號(hào)以區(qū)別。對(duì)namespace而言,因?yàn)橥籲amespace可能分布在多個(gè)不同的
頭文件中,而不同頭文件中可能在同一行使用BOOST_STATIC_ASSERT檢測(cè),
所以必須用一個(gè)namespace把斷言檢測(cè)隔離開,如上面例子所示。
此外,對(duì)于VC來說,在使用/ZI參數(shù)時(shí),__LINE__宏會(huì)發(fā)生錯(cuò)誤,
(參見MSDN中Q199057錯(cuò)誤),好在VC會(huì)忽略typedef重復(fù)定義。
對(duì)某些不支持typedef此類特性的編譯器,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
--
. 生命的意義在于 /\ ____\ /\_ \ /\_\ .
. 希望 \ \ \___/_\/\ \ \/_/__ __ _ _★ .
. 工作 \ \ ____\\ \ \ /\ \ /'__`\ /\`'_\ .
. 愛你的人 \ \ \___/ \ \ \___\ \ \/\ __//\ \ \/ .
. 和你愛的人 \ \___\ \ \_____\ \__\ \____\ \ \_\ .
. …… \/___/ \/_____/\/__/\/____/ \/_/ @126.com .
※ 來源:·BBS 水木清華站 bbs.edu.cn·[FROM: 202.114.32.225]
posted on 2007-12-14 10:02
金慶
閱讀(1039)
評(píng)論(1)
編輯
收藏
引用
所屬分類:
1. C/C++
評(píng)論
#
re: boost::static_assert
2008-01-05 21:26
螞蟻終結(jié)者
不錯(cuò),雖然沒用過。卻值的學(xué)習(xí)
回復(fù)
更多評(píng)論
刷新評(píng)論列表
只有注冊(cè)用戶
登錄
后才能發(fā)表評(píng)論。
【推薦】100%開源!大型工業(yè)跨平臺(tái)軟件C++源碼提供,建模,組態(tài)!
相關(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
博問
Chat2DB
管理
Powered by:
C++博客
Copyright © 金慶
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
免费不卡欧美自拍视频
|
狠狠综合久久av一区二区小说
|
亚洲高清av在线
|
欧美不卡在线
|
欧美成人日本
|
亚洲一区二区成人
|
中文在线不卡视频
|
国产欧美日韩精品专区
|
久久国产精品一区二区
|
久久精品国产亚洲高清剧情介绍
|
黄色日韩精品
|
欧美韩国日本综合
|
欧美日韩精品一区二区
|
欧美一区午夜精品
|
久久另类ts人妖一区二区
|
亚洲精品乱码久久久久久日本蜜臀
|
亚洲国产精品成人
|
欧美日韩精品免费观看视一区二区
|
欧美一级二区
|
亚洲欧洲一区二区三区在线观看
|
亚洲精品国精品久久99热
|
国产精品久久久久久户外露出
|
欧美一区二区精美
|
免费亚洲婷婷
|
亚洲欧美网站
|
免费观看在线综合
|
亚洲免费影视
|
美女网站久久
|
午夜精品久久久久久99热
|
久久午夜影视
|
亚洲免费在线播放
|
久久久噜噜噜久久人人看
|
在线视频亚洲一区
|
久久午夜精品一区二区
|
亚洲综合色视频
|
欧美高清在线视频观看不卡
|
欧美在线观看视频在线
|
欧美喷潮久久久xxxxx
|
久久躁狠狠躁夜夜爽
|
欧美日韩精品久久久
|
欧美成人精品在线播放
|
国产精品美女久久久久久久
|
亚洲午夜精品久久久久久app
|
欧美在线亚洲综合一区
|
亚洲一区亚洲二区
|
亚洲永久网站
|
一二三区精品
|
六月丁香综合
|
久久久7777
|
国产精品久久久久久久久久三级
|
亚洲国产精品久久久久婷婷884
|
国产欧美日韩高清
|
一本久道久久综合中文字幕
|
亚洲电影中文字幕
|
欧美怡红院视频
|
亚欧美中日韩视频
|
国产精品mv在线观看
|
亚洲人成亚洲人成在线观看
|
狠狠色综合色区
|
欧美在线高清视频
|
久久av二区
|
国产麻豆成人精品
|
亚洲永久免费av
|
亚洲欧美日本另类
|
国产精品豆花视频
|
中文在线资源观看网站视频免费不卡
|
亚洲精品乱码久久久久久
|
久久色在线观看
|
美女脱光内衣内裤视频久久影院
|
国产日韩欧美高清
|
亚洲欧美日韩国产成人精品影院
|
亚洲欧美国产精品va在线观看
|
国产精品白丝jk黑袜喷水
|
一区二区三区欧美亚洲
|
欧美一区不卡
|
国产在线精品一区二区夜色
|
欧美在线啊v一区
|
麻豆av一区二区三区
|
亚洲国产成人在线
|
欧美激情第三页
|
一区二区三区免费看
|
欧美一级专区
|
狠狠狠色丁香婷婷综合久久五月
|
久久se精品一区二区
|
欧美成人中文字幕
|
制服丝袜亚洲播放
|
国产精品自在线
|
久久精品日韩
|
亚洲欧洲一区二区三区久久
|
亚洲午夜高清视频
|
国产日韩1区
|
久久综合久色欧美综合狠狠
|
亚洲激情成人
|
欧美在线免费一级片
|
在线观看成人网
|
欧美日韩ab片
|
欧美在线视频观看
|
亚洲国产精品久久久久久女王
|
亚洲一区亚洲
|
亚洲成人在线网
|
欧美日韩免费一区二区三区视频
|
亚洲一区一卡
|
亚洲第一天堂av
|
欧美一区二区
|
亚洲免费成人
|
国产乱子伦一区二区三区国色天香
|
久久久久久精
|
中国成人黄色视屏
|
欧美成人免费在线
|
性色av香蕉一区二区
|
亚洲国产成人精品久久久国产成人一区
|
欧美久久电影
|
亚洲国产天堂久久综合网
|
另类av导航
|
午夜精品视频在线观看一区二区
|
欧美国产精品日韩
|
亚洲伊人网站
|
亚洲国产日韩欧美在线99
|
国产精品久久久久高潮
|
欧美大胆成人
|
久久亚洲综合色一区二区三区
|
一区二区高清在线
|
欧美ab在线视频
|
久久国产精品黑丝
|
亚洲一区日韩
|
日韩一区二区免费看
|
狠狠色丁香婷综合久久
|
国产精品嫩草久久久久
|
欧美激情综合色
|
久久综合九色九九
|
久久精品夜夜夜夜久久
|
亚洲一区精品视频
|
一本一本久久
|
亚洲美女啪啪
|
亚洲国产高潮在线观看
|
免费高清在线一区
|
久久久噜噜噜久噜久久
|
欧美一区视频
|
久久国产高清
|
老色鬼久久亚洲一区二区
|
久久久国产视频91
|
午夜免费日韩视频
|
亚洲一区免费在线观看
|
在线亚洲国产精品网站
|
99re66热这里只有精品4
|
亚洲人成毛片在线播放
|
亚洲国产精品www
|
亚洲国产裸拍裸体视频在线观看乱了中文
|
日韩一区二区福利
|
亚洲国产婷婷综合在线精品
|
亚洲大片av
|
91久久久一线二线三线品牌
|
最新日韩精品
|
99视频+国产日韩欧美
|
翔田千里一区二区
|
亚洲午夜久久久久久久久电影网
|
亚洲精品乱码久久久久
|
亚洲国产一区在线
|
欧美a级片网站
|
亚洲国产一区二区三区a毛片
|
亚洲国产精品久久91精品
|
亚洲欧洲精品一区二区
|
日韩一本二本av
|
亚洲天堂成人在线观看
|
亚洲免费影视
|
久久疯狂做爰流白浆xx
|
久久久欧美精品sm网站
|
久久一区二区精品
|
欧美区一区二区三区
|
欧美视频一区二区三区四区
|
国产精品国产馆在线真实露脸
|
先锋a资源在线看亚洲
|
快射av在线播放一区
|
欧美久久婷婷综合色
|
国产伦精品一区二区
|
在线观看国产一区二区
|
一区二区三区不卡视频在线观看
|
在线观看av不卡
|
日韩性生活视频
|
欧美亚洲在线视频
|
免费永久网站黄欧美
|
野花国产精品入口
|
久久黄色小说
|
欧美性猛片xxxx免费看久爱
|
激情综合网址
|
亚洲一区二区成人
|
美女亚洲精品
|
亚洲自拍另类
|
美女久久一区
|
国产亚洲人成a一在线v站
|
亚洲免费播放
|
久久精品一区二区国产
|
欧美第一黄网免费网站
|
国外视频精品毛片
|
99热在这里有精品免费
|
午夜精品福利视频
|
亚洲另类视频
|
久久精品中文字幕一区二区三区
|
亚洲三级电影全部在线观看高清
|
亚洲一区在线观看视频
|