看板 C_and_CPP 關於我們 聯絡資訊
C++ 有 namespace 的設定 主要的目的是用來防止命名衝突問題的發生 但今天跟個朋友討論 假設有兩個 module 它們的功能與 function 類似 (但仍有所不同) E.g. namespace A { void Func1(); void Func2(); ... } namespace B { void Func1(); void Func2(); ... } 是否有必要將 FuncN 前面加上 A/B 這個前綴? (Func1 => AFunc1, BFunc1) 我是認為這樣有點累贅 但朋友提出了一個觀點: 假設一個人想要找用到某個 function 功能的地方 加上前綴的情況他可以很輕易的找到呼叫 A::Func1 的人 (例如: grep AFunc1 ...) 如果單單只用 Func1 而沒有前綴, 在有 using namespace 的情況下會找到很多雜訊 你必須要去看真正呼叫它的檔案才知道它是查叫哪個版本的 Func1 無形中會增加很多開發成本 他這麼一說, 好像又蠻有道理的 不知道大家對這個問題的看法如何呢? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 59.120.41.39 ※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1409823392.A.0F2.html
uranusjr: 我覺得把 A 和 B 重構成 interface 然後用繼承比較實際 09/04 17:38
LPH66: grep -rl "using namespace A;" * | xargs grep "Func1" 09/04 18:50
LPH66: 這種狀況我會這麼解決... 09/04 18:50
LPH66: 前一個 grep 找出所有 using namespace A; 的檔案 09/04 18:51
LPH66: 扔給後面的 xargs 給 grep 當做搜尋範圍 09/04 18:51
LPH66: 然後另外再起一個 grep "A::Func1" 合起來就是全部了 09/04 18:52
disabledman: 不然就不要用using啊 09/04 23:01
BlazarArc: 不應該使用 using namespace in file scope 09/05 02:35
BlazarArc: 如果你使用都寫 A::Func1 那你一樣可以搜尋 09/05 02:38
Ebergies: 其實想一想, 如 1F 說的情況很多, 應該也會有同樣問題? 09/05 09:53
Ebergies: LPH66 的用法算是個人解吧~ LOL 跟大家說可以這樣搜之類 09/05 09:56
Ebergies: 關於 "不應該使用 using namespace in file scope" 09/05 09:56
Ebergies: 這部分有比較完整的理由嗎~? 我覺得在 file scope 用好 09/05 09:57
Ebergies: 像蠻普遍的? 09/05 09:58
littleshan: using namespace in file scope 是很合理的 09/05 10:05
littleshan: 然後這個問題可以用IDE去搜 (find reference) 09/05 10:06
azureblaze: 裝了小蕃茄沒這個煩惱XD 09/05 11:05
firose: A Tomato a Day Keeps the Doctor Away. 09/05 11:17
Killercat: 這也是讓我百思不得其解的地方 MS也不是做不到這些 09/05 12:15
Killercat: C#根本就是把爛番茄整個整合進去了 為什麼他們就是要 09/05 12:16
Killercat: 放著VC++爛 連xcode都比他好用了.... 09/05 12:16
BlazarArc: 我"個人"用 using namespace 頂多用在 function scope 09/05 12:44
BlazarArc: 至少可以馬上看到,而不用捲到檔案開頭 09/05 12:45
BlazarArc: 通常使用 namespace alias,所以大部分都有 qualify 09/05 12:46
BlazarArc: 當然這是我的習慣而已 09/05 12:46
PTT007: 隨便,爽就好 09/05 12:54
FukadaKyoko: 不推AFunc 推namespace 知道會衝突的時候就不要using 09/05 15:51
Ebergies: 看來大家的觀點都蠻一致的, 或許問題在於工具和指令使用 09/11 20:11
Ebergies: 上 09/11 20:11