[問題] 專案內的命名問題

作者: Ebergies (火神)   2014-09-04 17:36:29
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
無形中會增加很多開發成本
他這麼一說, 好像又蠻有道理的
不知道大家對這個問題的看法如何呢?
作者: uranusjr (←這人是超級笨蛋)   2014-09-04 17:38:00
我覺得把 A 和 B 重構成 interface 然後用繼承比較實際
作者: LPH66 (-6.2598534e+18f)   2014-09-04 18:50:00
grep -rl "using namespace A;" * | xargs grep "Func1"這種狀況我會這麼解決...前一個 grep 找出所有 using namespace A; 的檔案扔給後面的 xargs 給 grep 當做搜尋範圍然後另外再起一個 grep "A::Func1" 合起來就是全部了
作者: disabledman (m.m.)   2014-09-04 23:01:00
不然就不要用using啊
作者: BlazarArc (Midnight Sun)   2014-09-05 02:35:00
不應該使用 using namespace in file scope如果你使用都寫 A::Func1 那你一樣可以搜尋
作者: Ebergies (火神)   2014-09-05 09:53:00
其實想一想, 如 1F 說的情況很多, 應該也會有同樣問題?LPH66 的用法算是個人解吧~ LOL 跟大家說可以這樣搜之類關於 "不應該使用 using namespace in file scope"這部分有比較完整的理由嗎~? 我覺得在 file scope 用好像蠻普遍的?
作者: littleshan (我要加入劍道社!)   2014-09-05 10:05:00
using namespace in file scope 是很合理的然後這個問題可以用IDE去搜 (find reference)
作者: azureblaze (AzureBlaze)   2014-09-05 11:05:00
裝了小蕃茄沒這個煩惱XD
作者: firose (guest也是也是也是也是也)   2014-09-05 11:17:00
A Tomato a Day Keeps the Doctor Away.
作者: Killercat (殺人貓™)   2014-09-05 12:15:00
這也是讓我百思不得其解的地方 MS也不是做不到這些C#根本就是把爛番茄整個整合進去了 為什麼他們就是要放著VC++爛 連xcode都比他好用了....
作者: BlazarArc (Midnight Sun)   2014-09-05 12:44:00
我"個人"用 using namespace 頂多用在 function scope至少可以馬上看到,而不用捲到檔案開頭通常使用 namespace alias,所以大部分都有 qualify當然這是我的習慣而已
作者: PTT007 ( )   2014-09-05 12:54:00
隨便,爽就好
作者: FukadaKyoko (小毛哥)   2014-09-05 15:51:00
不推AFunc 推namespace 知道會衝突的時候就不要using
作者: Ebergies (火神)   2014-09-11 20:11:00
看來大家的觀點都蠻一致的, 或許問題在於工具和指令使用上

Links booklink

Contact Us: admin [ a t ] ucptt.com