[问题] 专案内的命名问题

楼主: 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