跨名称空间重载函数是否一定很困难?
|
我一直在用这种结构写一些代码
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行,否则C行不会编译,但这会使D行失败。
由于参数数量不同(直到C ++ 0x),无法对util :: read模板进行专门化。
将行A转换为namespace util
是不可行的,因为我不想导出新的read
。
我可以重命名read(MyType&,int)
,但那会破坏ahem风格。
有没有一种方法可以使这些跨命名空间的重载正常工作?他们不应该有充分的理由吗?
没有找到相关结果
已邀请:
2 个回复
蓟类
(B)来解决隐藏名称带来的复杂问题,同时还需要重载函数,在这种情况下D仍应起作用。请显示错误信息。
舞备联