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

看板C_and_CPP作者 (火神)時間9年前 (2014/09/04 17:36), 編輯推噓7(7022)
留言29則, 11人參與, 最新討論串1/1
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

09/04 17:38, , 1F
我覺得把 A 和 B 重構成 interface 然後用繼承比較實際
09/04 17:38, 1F

09/04 18:50, , 2F
grep -rl "using namespace A;" * | xargs grep "Func1"
09/04 18:50, 2F

09/04 18:50, , 3F
這種狀況我會這麼解決...
09/04 18:50, 3F

09/04 18:51, , 4F
前一個 grep 找出所有 using namespace A; 的檔案
09/04 18:51, 4F

09/04 18:51, , 5F
扔給後面的 xargs 給 grep 當做搜尋範圍
09/04 18:51, 5F

09/04 18:52, , 6F
然後另外再起一個 grep "A::Func1" 合起來就是全部了
09/04 18:52, 6F

09/04 23:01, , 7F
不然就不要用using啊
09/04 23:01, 7F

09/05 02:35, , 8F
不應該使用 using namespace in file scope
09/05 02:35, 8F

09/05 02:38, , 9F
如果你使用都寫 A::Func1 那你一樣可以搜尋
09/05 02:38, 9F

09/05 09:53, , 10F
其實想一想, 如 1F 說的情況很多, 應該也會有同樣問題?
09/05 09:53, 10F

09/05 09:56, , 11F
LPH66 的用法算是個人解吧~ LOL 跟大家說可以這樣搜之類
09/05 09:56, 11F

09/05 09:56, , 12F
關於 "不應該使用 using namespace in file scope"
09/05 09:56, 12F

09/05 09:57, , 13F
這部分有比較完整的理由嗎~? 我覺得在 file scope 用好
09/05 09:57, 13F

09/05 09:58, , 14F
像蠻普遍的?
09/05 09:58, 14F

09/05 10:05, , 15F
using namespace in file scope 是很合理的
09/05 10:05, 15F

09/05 10:06, , 16F
然後這個問題可以用IDE去搜 (find reference)
09/05 10:06, 16F

09/05 11:05, , 17F
裝了小蕃茄沒這個煩惱XD
09/05 11:05, 17F

09/05 11:17, , 18F
A Tomato a Day Keeps the Doctor Away.
09/05 11:17, 18F

09/05 12:15, , 19F
這也是讓我百思不得其解的地方 MS也不是做不到這些
09/05 12:15, 19F

09/05 12:16, , 20F
C#根本就是把爛番茄整個整合進去了 為什麼他們就是要
09/05 12:16, 20F

09/05 12:16, , 21F
放著VC++爛 連xcode都比他好用了....
09/05 12:16, 21F

09/05 12:44, , 22F
我"個人"用 using namespace 頂多用在 function scope
09/05 12:44, 22F

09/05 12:45, , 23F
至少可以馬上看到,而不用捲到檔案開頭
09/05 12:45, 23F

09/05 12:46, , 24F
通常使用 namespace alias,所以大部分都有 qualify
09/05 12:46, 24F

09/05 12:46, , 25F
當然這是我的習慣而已
09/05 12:46, 25F

09/05 12:54, , 26F
隨便,爽就好
09/05 12:54, 26F

09/05 15:51, , 27F
不推AFunc 推namespace 知道會衝突的時候就不要using
09/05 15:51, 27F

09/11 20:11, , 28F
看來大家的觀點都蠻一致的, 或許問題在於工具和指令使用
09/11 20:11, 28F

09/11 20:11, , 29F
09/11 20:11, 29F
文章代碼(AID): #1K23AW3o (C_and_CPP)