金慶的專(zhuān)欄
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è)
公告照片
搜索
積分與排名
積分 - 653850
排名 - 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ò)誤(11016)
2.?SVN中邪惡的replace(10937)
3.?VS2005編譯libevent(10404)
4.?混音算法的學(xué)習(xí)與研究(10183)
5.?C調(diào)用lua腳本的效率測(cè)試(9002)
評(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)
用結(jié)構(gòu)體來(lái)構(gòu)造封閉的名字空間
摘自《Extended STL》中譯
C++關(guān)鍵字namespace提供的名字空間是開(kāi)放的:你可以在任何時(shí)候擴(kuò)展其中的內(nèi)容。只要另外聲明一個(gè)同名的名字空間即可。但如此一來(lái)事態(tài)的發(fā)展可能完全出乎原作者的預(yù)料。例如,你可能寫(xiě)下這樣的代碼,指望用戶(hù)對(duì)其中的名字空間敬若神明。
// OstensiblyDefinitiveVersion.hpp
namespace covenant
{
int func(std::string const& s); // Specific version for std::string
template <typename S>
int func(S const& s); // General version for other types
} // namespace covenant
但是用戶(hù)可以改變covenant名字空間并帶來(lái)潛在的破壞性后果,而我們對(duì)此卻束手無(wú)策。
// CavalierManipulations.hpp
namespace covenant
{
int func(std::exception const& x);
} // namespace covenant
現(xiàn)在函數(shù)模板的適用范圍縮小了,以前那些完全依賴(lài)舊版名字空間的代碼會(huì)受到影響,或許它們的行為已經(jīng)發(fā)生了變化。一般而言這不是什么好事,也說(shuō)明了為什么C++標(biāo)準(zhǔn)只允許在一種情況下擴(kuò)展std名字空間,即把std名字空間業(yè)已存在的模板完全特化后再加入進(jìn)去。
為得到真正封閉的名字空間,你需要使用class/union/struct,就像這樣:
// EnforceablyDefinitiveVersion.hpp
struct covenant
{
private:
covenant(); // Prevent construction: it is a "namespace" after all
public:
static int func(std::string const& s);
template <typename S>
static int func(S const& s);
}; // "namespace" covenant
上 面這樣的"名字空間"和真正的名字空間相比,還受到一些額外的限制。例如它無(wú)法定義任何非整數(shù)類(lèi)型的成員常量。同時(shí)也不能聲明成員名字空間,而只能用內(nèi)嵌 的class/struct/union來(lái)模擬。但除了具備封閉性外,還有一些優(yōu)點(diǎn)也是名字空間不具備的,例如它允許定義私有成員以及友元,由此將其成員 的訪(fǎng)問(wèn)權(quán)限限定在一個(gè)已知的上下文中。
提示
用結(jié)構(gòu)體來(lái)構(gòu)造封閉的名字空間(當(dāng)然得定義私有的構(gòu)造函數(shù))。
(轉(zhuǎn)載請(qǐng)注明來(lái)源于金慶的專(zhuān)欄)
posted on 2008-05-19 16:44
金慶
閱讀(1342)
評(píng)論(0)
編輯
收藏
引用
所屬分類(lèi):
1. C/C++
只有注冊(cè)用戶(hù)
登錄
后才能發(fā)表評(píng)論。
【推薦】100%開(kāi)源!大型工業(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
博問(wèn)
Chat2DB
管理
Powered by:
C++博客
Copyright © 金慶
久久精品国产亚洲AV香蕉
|
精品国产福利久久久
|
国内精品久久久久影院薰衣草
|
成人久久免费网站
|
热久久国产精品
|
久久久久精品国产亚洲AV无码
|
久久精品aⅴ无码中文字字幕重口
|
91精品国产综合久久香蕉
|
久久久久国产精品嫩草影院
|
久久这里只有精品18
|
久久天天躁狠狠躁夜夜不卡
|
国内精品久久人妻互换
|
奇米影视7777久久精品
|
精品无码久久久久久久动漫
|
久久国产亚洲高清观看
|
伊人久久国产免费观看视频
|
久久久九九有精品国产
|
亚洲国产另类久久久精品小说
|
国内精品久久久久久不卡影院
|
久久精品国产亚洲精品2020
|
一极黄色视频久久网站
|
久久久久国产视频电影
|
色综合久久精品中文字幕首页
|
AV无码久久久久不卡蜜桃
|
久久综合久久美利坚合众国
|
久久久久久a亚洲欧洲aⅴ
|
久久精品国产亚洲av麻豆色欲
|
久久精品国产久精国产果冻传媒
|
亚洲精品乱码久久久久久按摩
|
久久久国产99久久国产一
|
久久国产精品视频
|
国产成人精品久久亚洲
|
人人狠狠综合久久亚洲婷婷
|
久久66热人妻偷产精品9
|
久久人人爽人人爽人人片AV不
|
亚洲国产高清精品线久久
|
久久婷婷五月综合成人D啪
|
久久人妻少妇嫩草AV无码蜜桃
|
久久狠狠爱亚洲综合影院
|
久久精品国产男包
|
人妻精品久久无码专区精东影业
|