金慶的專(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 © 金慶
国产精品岛国久久久久
|
国产毛片久久久久久国产毛片
|
亚洲精品无码久久久久久
|
97久久国产露脸精品国产
|
久久精品视频网
|
色综合久久夜色精品国产
|
99久久综合狠狠综合久久止
|
久久伊人亚洲AV无码网站
|
色88久久久久高潮综合影院
|
91亚洲国产成人久久精品
|
中文字幕久久精品无码
|
国内精品久久久久久久久
|
亚洲午夜久久久久久久久久
|
精品乱码久久久久久夜夜嗨
|
性欧美丰满熟妇XXXX性久久久
|
久久精品夜色噜噜亚洲A∨
|
亚洲AV成人无码久久精品老人
|
国产一区二区三精品久久久无广告
|
久久久久久久人妻无码中文字幕爆
|
99久久免费国产精品特黄
|
国产成人久久AV免费
|
狠狠色婷婷久久综合频道日韩
|
精品国产乱码久久久久软件
|
久久中文字幕视频、最近更新
|
亚洲精品乱码久久久久久自慰
|
人人狠狠综合88综合久久
|
久久亚洲综合色一区二区三区
|
午夜天堂av天堂久久久
|
久久99精品久久久大学生
|
久久乐国产综合亚洲精品
|
欧美麻豆久久久久久中文
|
精品国产热久久久福利
|
91久久精品电影
|
久久精品成人免费观看97
|
国产成人精品久久综合
|
国产亚洲精品久久久久秋霞
|
日韩十八禁一区二区久久
|
久久丝袜精品中文字幕
|
伊人色综合久久天天网
|
久久久久久午夜精品
|
久久国产色av免费看
|