青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
金慶的專欄
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 © 金慶
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
欧美日韩亚洲一区
|
亚洲人妖在线
|
亚洲国产电影
|
伊人久久综合
|
一色屋精品视频免费看
|
在线免费观看日本一区
|
亚洲国产精品ⅴa在线观看
|
国产精品系列在线播放
|
国产精品日韩欧美一区
|
国产揄拍国内精品对白
|
亚洲国产精品综合
|
亚洲一区二区三区四区在线观看
|
亚洲欧美日本国产专区一区
|
久久aⅴ国产欧美74aaa
|
欧美成人资源
|
一区二区三区高清在线观看
|
欧美一级专区
|
欧美日韩国产小视频
|
国产精品一区二区三区四区五区
|
精品二区视频
|
亚洲一级一区
|
久久综合电影一区
|
亚洲精品视频免费观看
|
欧美亚洲在线观看
|
欧美激情亚洲国产
|
国内偷自视频区视频综合
|
夜夜嗨av一区二区三区网站四季av
|
欧美一区二区国产
|
亚洲高清视频一区
|
欧美伊人久久大香线蕉综合69
|
欧美 日韩 国产精品免费观看
|
亚洲电影天堂av
|
亚洲午夜精品久久
|
欧美岛国在线观看
|
国模精品娜娜一二三区
|
一区电影在线观看
|
欧美大片在线观看一区
|
亚洲欧美视频
|
欧美视频你懂的
|
最新高清无码专区
|
每日更新成人在线视频
|
午夜在线视频一区二区区别
|
欧美日韩国产小视频在线观看
|
一区在线播放视频
|
欧美中在线观看
|
一本色道久久综合亚洲精品婷婷
|
久久激情五月激情
|
99综合电影在线视频
|
欧美69wwwcom
|
在线观看欧美
|
老司机午夜精品视频
|
中日韩男男gay无套
|
欧美日韩视频一区二区三区
|
亚洲精品欧美日韩专区
|
亚洲第一福利视频
|
欧美成人午夜免费视在线看片
|
伊人久久成人
|
欧美搞黄网站
|
欧美高清hd18日本
|
亚洲全部视频
|
亚洲电影一级黄
|
欧美激情视频在线免费观看 欧美视频免费一
|
欧美成人亚洲成人
|
久久免费视频这里只有精品
|
一区精品在线
|
欧美国产精品va在线观看
|
久久久久久一区
|
亚洲国产精品欧美一二99
|
免费欧美在线视频
|
欧美 日韩 国产 一区
|
日韩一级大片
|
一本色道久久综合亚洲精品高清
|
国产精品理论片在线观看
|
亚洲欧洲99久久
|
午夜久久99
|
又紧又大又爽精品一区二区
|
欧美福利电影网
|
欧美日韩不卡一区
|
性视频1819p久久
|
久久久久天天天天
|
开心色5月久久精品
|
亚洲国产精品第一区二区
|
亚洲国产精品嫩草影院
|
欧美午夜一区
|
久久久久久久波多野高潮日日
|
亚洲欧美日韩国产一区
|
国产视频亚洲精品
|
欧美大片第1页
|
欧美午夜久久
|
久久免费国产精品1
|
欧美精品入口
|
久久久久国产精品人
|
美日韩精品免费
|
亚洲欧美另类久久久精品2019
|
久久成人一区
|
亚洲一区二区三区中文字幕在线
|
欧美亚洲一级片
|
一区二区欧美国产
|
久久精品国产欧美激情
|
一级日韩一区在线观看
|
久久成年人视频
|
中文有码久久
|
欧美.www
|
蜜臀av一级做a爰片久久
|
欧美涩涩视频
|
亚洲国产欧美日韩精品
|
国产午夜精品一区二区三区视频
|
欧美激情欧美狂野欧美精品
|
国产精品萝li
|
亚洲精品看片
|
亚洲经典一区
|
久久久xxx
|
午夜精品久久久久
|
欧美日韩免费看
|
欧美高清影院
|
亚洲福利视频免费观看
|
欧美一区二视频在线免费观看
|
亚洲午夜国产成人av电影男同
|
久久中文字幕一区二区三区
|
欧美一区1区三区3区公司
|
欧美日韩精品在线
|
亚洲人成人77777线观看
|
亚洲高清资源
|
麻豆精品在线观看
|
乱人伦精品视频在线观看
|
国产视频综合在线
|
亚洲一区亚洲二区
|
亚洲中字黄色
|
欧美私人网站
|
中文国产成人精品
|
香蕉久久国产
|
国产欧美日韩另类一区
|
亚洲一区二区少妇
|
性做久久久久久久免费看
|
国产精品盗摄久久久
|
在线亚洲伦理
|
欧美一区亚洲一区
|
国产亚洲二区
|
久久久亚洲高清
|
欧美黑人多人双交
|
亚洲麻豆国产自偷在线
|
欧美精品一区三区在线观看
|
亚洲精品免费一二三区
|
亚洲一二区在线
|
久久久久欧美精品
|
欧美在线视频免费
|
亚洲国产精品激情在线观看
|
亚洲国产婷婷香蕉久久久久久
|
99视频在线精品国自产拍免费观看
|
欧美成人dvd在线视频
|
午夜精品福利一区二区蜜股av
|
亚洲欧美日本另类
|
日韩视频一区二区
|
在线精品高清中文字幕
|
久久福利一区
|
免播放器亚洲
|
最新亚洲激情
|
欧美日本三区
|
9i看片成人免费高清
|
羞羞漫画18久久大片
|
国产亚洲永久域名
|
免费观看一级特黄欧美大片
|
91久久久国产精品
|
亚洲中无吗在线
|
尹人成人综合网
|
欧美日韩在线播放一区二区
|
欧美一区91
|
亚洲欧洲精品一区二区三区
|
亚洲午夜精品17c
|
经典三级久久
|
国产精品国产三级国产
|
久久久久一区二区三区四区
|
亚洲精品久久久久久一区二区
|
午夜久久tv
|
妖精视频成人观看www
|
国产日本欧美一区二区三区
|
麻豆成人av
|
亚洲欧美国产va在线影院
|
蜜桃久久av一区
|
亚洲欧美日韩中文在线制服
|
亚洲国产精品毛片
|
国产精品揄拍500视频
|
欧美刺激性大交免费视频
|
亚洲精品久久久蜜桃
|
国产精品中文字幕在线观看
|
裸体一区二区三区
|
欧美一区二区国产
|
中文在线一区
|
亚洲东热激情
|
美女在线一区二区
|
性欧美xxxx大乳国产app
|
日韩视频一区二区三区在线播放
|
国产午夜精品视频
|
国产精品视频网站
|
久久在线免费观看
|
午夜国产一区
|
亚洲一区二区三区高清不卡
|
亚洲精品在线电影
|
91久久线看在观草草青青
|
韩日欧美一区
|