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:00grep -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 那你一样可以搜寻
其实想一想, 如 1F 说的情况很多, 应该也会有同样问题?LPH66 的用法算是个人解吧~ LOL 跟大家说可以这样搜之类关于 "不应该使用 using namespace in file scope"这部分有比较完整的理由吗~? 我觉得在 file scope 用好像蛮普遍的?
using namespace in file scope 是很合理的然后这个问题可以用IDE去搜 (find reference)
作者: firose (guest也是也是也是也是也) 2014-09-05 11:17:00
A Tomato a Day Keeps the Doctor Away.
这也是让我百思不得其解的地方 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随便,爽就好
不推AFunc 推namespace 知道会冲突的时候就不要using
看来大家的观点都蛮一致的, 或许问题在于工具和指令使用上