青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
金慶的專欄
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è)
公告照片
搜索
積分與排名
積分 - 662300
排名 - 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)容較長(zhǎng),點(diǎn)擊標(biāo)題查看
--金慶
3.?re: mingw編譯OrzNet
能發(fā)送一個(gè)mingw編譯好的OrzNet庫給我嗎? 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ò)誤(11075)
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)單但常用的宏,顧名思義起到編譯期
斷言的功效,可以通過它,在編譯時(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
金慶
閱讀(1044)
評(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)論。
相關(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 © 金慶
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
国产精品扒开腿做爽爽爽视频
|
久久综合一区二区三区
|
欧美一区二区三区四区在线观看地址
|
欧美大片第1页
|
欧美一进一出视频
|
亚洲一区二区在线观看视频
|
亚洲免费av观看
|
日韩午夜三级在线
|
一本色道久久综合亚洲精品不卡
|
亚洲人久久久
|
亚洲国产高清aⅴ视频
|
亚洲成人在线视频播放
|
久久久亚洲人
|
欧美不卡一区
|
亚洲精品国产欧美
|
夜夜爽99久久国产综合精品女不卡
|
国产自产v一区二区三区c
|
国产精品一区免费观看
|
国产在线视频不卡二
|
亚洲国产中文字幕在线观看
|
亚洲人成网站精品片在线观看
|
久久国产主播
|
国产精品极品美女粉嫩高清在线
|
欧美日韩高清在线
|
国产精品久久久久久久久果冻传媒
|
伊人蜜桃色噜噜激情综合
|
一区在线观看视频
|
亚洲精品精选
|
亚洲欧美区自拍先锋
|
麻豆av一区二区三区
|
亚洲国产精品v
|
亚洲福利国产精品
|
亚洲香蕉网站
|
久久精品视频免费播放
|
亚洲国产精品va在线看黑人动漫
|
亚洲人成在线播放网站岛国
|
亚洲影院高清在线
|
欧美 日韩 国产精品免费观看
|
国产精品久线观看视频
|
在线电影国产精品
|
亚洲伊人久久综合
|
免费看黄裸体一级大秀欧美
|
中文一区在线
|
欧美大片免费久久精品三p
|
国产精品久久久久久亚洲毛片
|
亚洲国产成人高清精品
|
亚洲综合色在线
|
亚洲国产毛片完整版
|
香蕉av福利精品导航
|
欧美精品在线播放
|
国产视频在线一区二区
|
欧美丝袜一区二区
|
亚洲高清不卡
|
久久亚洲国产成人
|
亚洲一区二区三区在线看
|
能在线观看的日韩av
|
国产亚洲福利
|
欧美在线播放一区二区
|
亚洲精品偷拍
|
欧美激情四色
|
亚洲国产综合在线
|
美女精品视频一区
|
午夜在线电影亚洲一区
|
国产精品入口福利
|
亚洲午夜激情网页
|
99精品视频网
|
欧美激情在线播放
|
日韩手机在线导航
|
亚洲精品久久嫩草网站秘色
|
欧美成人中文字幕在线
|
亚洲欧洲精品一区二区三区不卡
|
亚洲网在线观看
|
好看的av在线不卡观看
|
亚洲摸下面视频
|
一区二区三区欧美成人
|
欧美婷婷在线
|
亚洲欧美区自拍先锋
|
一区二区三区www
|
国产精品国产三级国产普通话蜜臀
|
亚洲伦理一区
|
亚洲人成网站色ww在线
|
欧美日韩精品一区二区三区四区
|
宅男噜噜噜66一区二区
|
夜夜爽99久久国产综合精品女不卡
|
欧美日韩精品二区
|
亚洲性夜色噜噜噜7777
|
一区二区免费在线播放
|
国产精品久久福利
|
午夜精品久久久久久久99樱桃
|
亚洲综合色激情五月
|
国产精品视屏
|
美国成人直播
|
欧美国产丝袜视频
|
亚洲在线播放电影
|
欧美有码在线观看视频
|
亚洲高清影视
|
亚洲婷婷综合色高清在线
|
国产一区二区精品久久99
|
欧美成人免费观看
|
欧美三级电影精品
|
欧美中文字幕第一页
|
久久国产精品99国产
|
尤妮丝一区二区裸体视频
|
亚洲伦理精品
|
国内激情久久
|
99精品免费视频
|
一区二区三区在线视频观看
|
一本色道久久综合精品竹菊
|
亚洲第一在线综合在线
|
亚洲手机在线
|
亚洲伦理在线
|
久久久久一区二区三区
|
亚洲欧美在线aaa
|
欧美电影在线观看完整版
|
久久漫画官网
|
国产精品成人av性教育
|
欧美激情精品久久久久久蜜臀
|
欧美日韩美女在线
|
欧美jizzhd精品欧美巨大免费
|
欧美日韩亚洲在线
|
欧美电影免费观看网站
|
韩国精品主播一区二区在线观看
|
日韩天堂在线视频
|
亚洲国产欧美在线
|
欧美一区二区精品
|
久久国产色av
|
欧美三区在线视频
|
久久亚洲一区二区三区四区
|
欧美福利专区
|
免费人成精品欧美精品
|
国产精品欧美久久
|
99视频精品在线
|
亚洲高清免费在线
|
欧美一区二区黄色
|
久久久美女艺术照精彩视频福利播放
|
久久精品国产清高在天天线
|
在线视频欧美精品
|
乱中年女人伦av一区二区
|
欧美一级视频精品观看
|
亚洲乱码精品一二三四区日韩在线
|
欧美sm重口味系列视频在线观看
|
亚洲国产高清在线
|
免费久久久一本精品久久区
|
六月丁香综合
|
性欧美精品高清
|
女人天堂亚洲aⅴ在线观看
|
亚洲手机视频
|
欧美在线视频导航
|
亚洲精品免费在线观看
|
亚洲毛片在线看
|
国产精品婷婷午夜在线观看
|
欧美一区亚洲
|
一区二区三区精品国产
|
久久福利精品
|
亚洲图片欧洲图片日韩av
|
欧美中文在线观看
|
亚洲精品一区中文
|
国产精品成人午夜
|
欧美 日韩 国产精品免费观看
|
欧美精品一区在线发布
|
久久一区二区三区四区五区
|
欧美日韩999
|
久久本道综合色狠狠五月
|
亚洲欧美国产日韩天堂区
|
另类成人小视频在线
|
国产精品自拍三区
|
亚洲乱码国产乱码精品精可以看
|
国模精品娜娜一二三区
|
亚洲精品美女在线
|
永久免费精品影视网站
|
99成人精品
|
中国亚洲黄色
|
久久综合色88
|
在线日韩欧美
|
翔田千里一区二区
|
亚洲欧美日韩视频二区
|
欧美视频免费在线观看
|
亚洲青涩在线
|
国产日韩欧美综合在线
|
亚洲精品永久免费精品
|
日韩一级黄色av
|
蜜桃久久av一区
|
免费成人高清视频
|
国产精品国产三级国产aⅴ无密码
|
久久国产主播精品
|
免费亚洲电影
|
午夜精品福利一区二区三区av
|
欧美日韩亚洲一区二区三区在线观看
|
亚洲一区在线视频
|
欧美精品色网
|
亚洲激情偷拍
|
亚洲日本成人网
|
国产视频亚洲
|
午夜一区不卡
|
亚洲午夜视频
|
亚洲视频一区二区免费在线观看
|
激情久久久久
|
久久久久综合
|
欧美在线视频一区二区三区
|
av不卡在线看
|