金慶的專欄
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)
相冊
公告照片
搜索
積分與排名
積分 - 659031
排名 - 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" 錯誤(11054)
2.?SVN中邪惡的replace(10972)
3.?VS2005編譯libevent(10429)
4.?混音算法的學習與研究(10230)
5.?C調用lua腳本的效率測試(9019)
評論排行榜
1.?VC6正在被拋棄(35)
2.?VS2005編譯libevent(21)
3.?"multiple definition of" 錯誤(18)
4.?C++引用優于指針(17)
5.?ACE與ASIO之間關于Socket編程的比較(16)
用結構體來構造封閉的名字空間
摘自《Extended STL》中譯
C++關鍵字namespace提供的名字空間是開放的:你可以在任何時候擴展其中的內容。只要另外聲明一個同名的名字空間即可。但如此一來事態的發展可能完全出乎原作者的預料。例如,你可能寫下這樣的代碼,指望用戶對其中的名字空間敬若神明。
// 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
但是用戶可以改變covenant名字空間并帶來潛在的破壞性后果,而我們對此卻束手無策。
// CavalierManipulations.hpp
namespace covenant
{
int func(std::exception const& x);
} // namespace covenant
現在函數模板的適用范圍縮小了,以前那些完全依賴舊版名字空間的代碼會受到影響,或許它們的行為已經發生了變化。一般而言這不是什么好事,也說明了為什么C++標準只允許在一種情況下擴展std名字空間,即把std名字空間業已存在的模板完全特化后再加入進去。
為得到真正封閉的名字空間,你需要使用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
上 面這樣的"名字空間"和真正的名字空間相比,還受到一些額外的限制。例如它無法定義任何非整數類型的成員常量。同時也不能聲明成員名字空間,而只能用內嵌 的class/struct/union來模擬。但除了具備封閉性外,還有一些優點也是名字空間不具備的,例如它允許定義私有成員以及友元,由此將其成員 的訪問權限限定在一個已知的上下文中。
提示
用結構體來構造封閉的名字空間(當然得定義私有的構造函數)。
(轉載請注明來源于金慶的專欄)
posted on 2008-05-19 16:44
金慶
閱讀(1352)
評論(0)
編輯
收藏
引用
所屬分類:
1. C/C++
只有注冊用戶
登錄
后才能發表評論。
【推薦】100%開源!大型工業跨平臺軟件C++源碼提供,建模,組態!
相關文章:
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 © 金慶
国内精品久久久久久99蜜桃
|
国产成人精品久久
|
国产999精品久久久久久
|
欧美一区二区精品久久
|
久久精品国产亚洲Aⅴ蜜臀色欲
|
亚洲精品无码久久毛片
|
久久久一本精品99久久精品66
|
久久国产精品免费
|
久久久久久亚洲AV无码专区
|
国产精品无码久久久久
|
人妻少妇久久中文字幕
|
久久久久国色AV免费看图片
|
国产精品岛国久久久久
|
97精品伊人久久大香线蕉
|
国产精品岛国久久久久
|
色妞色综合久久夜夜
|
久久精品人妻一区二区三区
|
精品久久久久久亚洲精品
|
久久亚洲sm情趣捆绑调教
|
国产精品伊人久久伊人电影
|
久久久精品人妻一区二区三区蜜桃
|
久久噜噜电影你懂的
|
久久99精品久久久久久动态图
|
久久久久久久国产免费看
|
7777久久亚洲中文字幕
|
久久亚洲国产成人精品性色
|
国产成年无码久久久免费
|
久久精品人妻中文系列
|
青青热久久国产久精品
|
女同久久
|
四虎国产精品免费久久
|
婷婷久久综合
|
中文成人无码精品久久久不卡
|
人妻精品久久无码区
|
久久精品国产亚洲AV影院
|
精产国品久久一二三产区区别
|
亚洲国产日韩欧美久久
|
久久久久se色偷偷亚洲精品av
|
99久久综合国产精品免费
|
亚洲午夜久久久久久久久电影网
|
7777久久久国产精品消防器材
|