青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
金慶的專欄
C++博客
::
首頁
::
新隨筆
::
聯系
::
聚合
::
管理
::
423 隨筆 :: 0 文章 :: 454 評論 :: 0 Trackbacks
公告
我的隨筆
我的評論
我參與的隨筆
留言簿
(12)
給我留言
查看公開留言
查看私人留言
隨筆分類
(502)
1. C/C++(166)
(rss)
2. 網游開發(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)
相冊
公告照片
搜索
積分與排名
積分 - 662249
排名 - 25
最新評論
1.?re: boost::asio::spawn 將一統C++網絡庫
asio 成為C++首選網絡庫
--linda
2.?re: log4cxx中文輸出錯誤補丁
評論內容較長,點擊標題查看
--金慶
3.?re: mingw編譯OrzNet
能發送一個mingw編譯好的OrzNet庫給我嗎? liuweiqcxy@163.com
謝謝!
--劉威
4.?re: log4cxx中文輸出錯誤補丁
評論內容較長,點擊標題查看
--bigbad
5.?re: log4cxx中文輸出錯誤補丁
評論內容較長,點擊標題查看
--bigbad
閱讀排行榜
1.?"multiple definition of" 錯誤(11074)
2.?SVN中邪惡的replace(11000)
3.?VS2005編譯libevent(10456)
4.?混音算法的學習與研究(10258)
5.?C調用lua腳本的效率測試(9025)
評論排行榜
1.?VC6正在被拋棄(35)
2.?VS2005編譯libevent(21)
3.?"multiple definition of" 錯誤(18)
4.?C++引用優于指針(17)
5.?ACE與ASIO之間關于Socket編程的比較(16)
boost::static_assert
原文地址:
http://www.smth.edu.cn/bbsanc.php?path=%2Fgroups%2Fdevelop.faq%2FProgramming%2Flanguages%2Fc_cpp%2Fboost%2FM.1021441404.O0
發信人: flier (小海 (:好日子不多了:)), 信區: Programming
標 題: boost::static_assert
發信站: BBS 水木清華站 (Wed May 15 13:43:35 2002)
boost::static_assert
BOOST_STATIC_ASSERT的
使用
BOOST_STATIC_ASSERT是一個簡單但常用的宏,顧名思義起到編譯期
斷言的功效,可以通過它,在編譯時對開發環境以及類型定義進行檢查。
此類型檢測對程序運行時無任何效率和空間上的影響。
例如在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。
也可以在模板函數中檢測入口參數的類型是否符合要求
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函數的輸入迭代子符合random access iterator的concept
此外還可以在模板類里面驗證模板參數
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 */
};
通過以上示例,我們可以總結出BOOST_STATIC_ASSERT的基本使用規律
首先是全局上對編譯環境進行檢測,看是否符合設計開發時的假定,這對程序的
可移植性有很大幫助。其次是在模板類、模板函數中,對作為模板參數的類型
進行檢測,驗證其是否符合設計時假設。最后是能夠將gp中的concept概念貫徹
到代碼中,使代碼強制性與設計同步,并增強代碼可讀性。
BOOST_STATIC_ASSERT的
實現
在實現上,BOOST_STATIC_ASSERT宏利用c++規范中,對不完整類型
即不可實例化的類型,在對其進行sizeof運算時編譯錯誤的特性,完成功能
大概的簡化代碼如下
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__
注意為了能夠使用多個BOOST_STATIC_ASSERT,在類型命名時加入了
行號以區別。對namespace而言,因為同一namespace可能分布在多個不同的
頭文件中,而不同頭文件中可能在同一行使用BOOST_STATIC_ASSERT檢測,
所以必須用一個namespace把斷言檢測隔離開,如上面例子所示。
此外,對于VC來說,在使用/ZI參數時,__LINE__宏會發生錯誤,
(參見MSDN中Q199057錯誤),好在VC會忽略typedef重復定義。
對某些不支持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)
評論(1)
編輯
收藏
引用
所屬分類:
1. C/C++
評論
#
re: boost::static_assert
2008-01-05 21:26
螞蟻終結者
不錯,雖然沒用過。卻值的學習
回復
更多評論
刷新評論列表
只有注冊用戶
登錄
后才能發表評論。
相關文章:
How are dtLinks created in NavMesh
C++ parameter passing rules
Naming Conventions for Accessors
Visual Studio 2019 Compiler Hangs
Fbx File Format Identifier
查找內存錯誤
std::thread 中的異常會丟失調用棧
用賦值代替 protobuf CopyFrom()
vs2017 linux 編譯輸出改成 vs 格式
為 LiteIDE 添加選中標記
網站導航:
博客園
IT新聞
BlogJava
博問
Chat2DB
管理
Powered by:
C++博客
Copyright © 金慶
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
国产女同一区二区
|
亚洲午夜高清视频
|
欧美国产精品v
|
一本色道久久综合亚洲精品按摩
|
久久er99精品
|
午夜精品在线看
|
国产精品夫妻自拍
|
欧美福利视频在线观看
|
99国产精品国产精品久久
|
欧美激情精品久久久六区热门
|
久久久综合视频
|
日韩一区二区福利
|
美女黄色成人网
|
亚洲精品久久久久久久久久久久久
|
欧美一区二区三区四区在线观看
|
美日韩精品免费观看视频
|
一区二区欧美在线观看
|
精品1区2区3区4区
|
夜夜爽www精品
|
亚洲精选一区
|
免费观看不卡av
|
亚洲一区中文
|
影音先锋在线一区
|
亚洲第一中文字幕在线观看
|
国产精品成人久久久久
|
久久久夜夜夜
|
久久九九热re6这里有精品
|
亚洲网站在线观看
|
免费亚洲网站
|
亚洲国产成人av好男人在线观看
|
国产色产综合产在线视频
|
国产欧美视频一区二区
|
欧美视频网站
|
欧美午夜无遮挡
|
老牛国产精品一区的观看方式
|
日韩视频免费看
|
老司机亚洲精品
|
麻豆av一区二区三区久久
|
亚洲午夜女主播在线直播
|
亚洲免费观看高清完整版在线观看
|
亚洲激情在线播放
|
亚洲福利免费
|
99精品99
|
在线视频亚洲一区
|
国产亚洲欧美另类一区二区三区
|
国产精品一区二区在线
|
欧美视频一区二区三区…
|
欧美日韩视频在线一区二区
|
国自产拍偷拍福利精品免费一
|
欧美亚洲成人网
|
国产亚洲成精品久久
|
亚洲日本中文字幕免费在线不卡
|
国产精品免费观看在线
|
亚洲国产日本
|
欧美一区二区三区啪啪
|
日韩一二三区视频
|
亚洲永久免费视频
|
麻豆精品在线播放
|
亚洲欧美日韩一区二区在线
|
国产精品扒开腿做爽爽爽视频
|
日韩视频免费看
|
欧美韩国在线
|
亚洲高清久久网
|
久久夜色精品国产噜噜av
|
欧美一区二区三区视频
|
欧美夫妇交换俱乐部在线观看
|
亚洲精品国产拍免费91在线
|
亚洲福利视频一区
|
亚洲欧美在线x视频
|
国产视频久久久久久久
|
久久狠狠婷婷
|
美乳少妇欧美精品
|
亚洲国产日韩综合一区
|
欧美成人午夜77777
|
亚洲午夜极品
|
亚洲人体影院
|
欧美日韩另类丝袜其他
|
亚洲人成在线观看一区二区
|
亚洲欧美日产图
|
av成人毛片
|
欧美日韩中文字幕在线
|
夜夜嗨av一区二区三区四季av
|
亚洲激情专区
|
欧美美女bbbb
|
久久欧美中文字幕
|
国产精品九九
|
亚洲欧美久久
|
亚洲美女在线一区
|
国产九九精品视频
|
亚洲第一区在线观看
|
亚洲性视频h
|
欧美午夜片在线免费观看
|
亚洲午夜精品久久
|
欧美国产亚洲另类动漫
|
在线免费日韩片
|
欧美黑人在线观看
|
欧美日韩一区二区免费视频
|
亚洲第一区在线观看
|
精品电影一区
|
欧美亚洲免费电影
|
欧美一区二区三区四区夜夜大片
|
国产精品久久久久久久久搜平片
|
久久免费的精品国产v∧
|
国产女同一区二区
|
另类人畜视频在线
|
国产精品视频免费
|
亚洲综合久久久久
|
亚洲毛片在线
|
国产欧美一区二区在线观看
|
久久精品夜色噜噜亚洲a∨
|
亚洲第一天堂av
|
欧美韩日一区二区三区
|
欧美日韩精品一本二本三本
|
在线观看亚洲a
|
欧美aaa级
|
欧美国产日韩一区二区
|
午夜日韩在线
|
久久99在线观看
|
欧美在线资源
|
欧美激情第一页xxx
|
欧美激情亚洲综合一区
|
国产欧美va欧美不卡在线
|
一区二区av在线
|
亚洲一品av免费观看
|
国产精品三上
|
欧美电影专区
|
韩国福利一区
|
亚洲国产你懂的
|
在线视频欧美日韩
|
久久综合久久久久88
|
亚洲视频免费
|
欧美男人的天堂
|
亚洲国产精品小视频
|
亚洲欧美中文另类
|
91久久视频
|
欧美v国产在线一区二区三区
|
欧美三级在线
|
一本久久a久久精品亚洲
|
美腿丝袜亚洲色图
|
久久婷婷国产综合尤物精品
|
性久久久久久久久
|
国产精品成人观看视频免费
|
欧美淫片网站
|
亚洲精品国产精品国自产观看浪潮
|
一本色道久久综合亚洲精品不卡
|
久久精品国产亚洲一区二区三区
|
亚洲经典视频在线观看
|
国产精品二区在线
|
亚洲一区二区在线看
|
一区二区三区波多野结衣在线观看
|
欧美成年人视频
|
在线视频你懂得一区
|
亚洲字幕一区二区
|
欧美午夜在线观看
|
国产欧美一区二区精品秋霞影院
|
欧美激情按摩
|
美日韩精品免费
|
国产精品三级视频
|
亚洲国产91
|
性亚洲最疯狂xxxx高清
|
国精产品99永久一区一区
|
久久亚洲色图
|
国产精品xxx在线观看www
|
99国产成+人+综合+亚洲欧美
|
免费中文日韩
|
欧美精品免费看
|
亚洲综合电影
|
亚洲精品久久久久久久久久久久久
|
性8sex亚洲区入口
|
国产精品拍天天在线
|
一区二区三区日韩精品视频
|
欧美一区二区在线免费观看
|
亚洲国产精品t66y
|
久久久久久久尹人综合网亚洲
|
国产精品视频一区二区三区
|
国产精品久久一卡二卡
|
国产日韩欧美在线一区
|
国产欧美日韩综合一区在线播放
|
国产一区二区三区高清播放
|
麻豆国产精品777777在线
|
久久天天躁狠狠躁夜夜av
|
欧美日韩亚洲一区三区
|
久久久久国产精品一区二区
|
欧美高清影院
|
国产尤物精品
|
在线亚洲精品
|
亚洲免费在线观看视频
|
韩国一区二区三区在线观看
|
欧美国产先锋
|
99在线观看免费视频精品观看
|
亚洲免费在线视频
|
欧美男人的天堂
|
亚洲激情在线观看视频免费
|
亚洲精品中文字幕在线
|
久久久精品一区二区三区
|
亚洲午夜三级在线
|
亚洲无线一线二线三线区别av
|
一区二区欧美在线
|
国产热re99久久6国产精品
|
久久国产精品99国产精
|