【发布时间】:2011-04-13 14:21:07
【问题描述】:
我一直在写一些基本上是这种结构的代码
namespace util {
void read (int &);
template <typename T>
void read (T &);
}
void foo ();
using namespace util;
namespace { // A
void read (MyType &, int);
void do_something () {
MyType t;
int i;
// using util::read; // B
read (i); // C
read (t,i); // D
}
}
void foo () {
do_something ();
}
在第一行 C 没有编译,除非我将其完全限定为 util::read(i) 或未注释的 B 行,但这会使 D 行失败。
由于参数的数量不同(直到 C++0x),所以无法专门化模板 util::read。
将 A 行转换为 namespace util 不是一个选项,因为我不想导出新的 read。
我可以重命名 read(MyType&,int),但这会破坏 ahem 风格。
有没有办法让这些跨命名空间重载工作得很好?他们不应该有充分的理由吗?
【问题讨论】:
-
取消 B 行的注释时有什么错误。我认为它没有问题(g++ 4.4.4 也没有)。
-
你总是可以跳过
using namespace util;
标签: c++ coding-style namespaces overloading