我一直在写一些代码基本上是这样的结构是否必须很难在命名空间中重载函数?
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();
}
在第一线下没有编制,除非我完全有资格作为util::read(i)
或注释掉线B,而是让行d失败。
专用模板util :: read是不可能的,因为参数的数量是不同的(直到C++ 0x)。
将A行变成namespace util
不是一种选择,因为我不想导出新的read
。
我可以重新命名为read(MyType&,int)
但是打破ahem风格。
有没有办法让这些交叉命名空间重载很好地工作?他们不应该有一个很好的理由吗?
你在分解B行时有什么错误,我没有发现问题(也没有g ++ 4.4.4)。 – AProgrammer 2011-04-13 14:30:05
你总是可以跳过'using namespace util;' – Puppy 2011-04-13 16:41:44