我一直在使用基本上这种结构编写代码
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行,则C行无法编译,但这会导致D行失败。由于参数数量不同(直到C ++ 0x),无法专门化模板util :: read。
将A行转换为
namespace util
不是一个选项,因为我不想导出新的read
。我可以重命名
read(MyType&,int)
,但这会破坏风格。有办法使这些跨命名空间的重载正常工作吗?它们不应该有很好的理由吗?
using namespace util;
。 - Puppy