如何在第二个f()
中进行调用,找到具有非限定查找的第一个f()
,以便ADL和普通名称查找规则仍可用?
注意:我不想更改任何功能的名称。
namespace x
{
void f()
{
}
class C
{
void f()
{
x::f();
}
};
}
答案 0 :(得分:2)
只需引入功能:
void f()
{
using x::f;
f(); // calls x::f()
}
这样做的原因是,复制Mike Seymour's answer:
因为using声明将x :: f带入f的范围,该范围比C的范围窄。不合格的查找会考虑本地块范围,找到匹配,并在考虑更宽的类范围之前停止。由于没有函数参数,因此没有依赖于参数的查找,因此不会考虑其他范围。
答案 1 :(得分:0)
您可以创建一个包装器:
namespace x
{
void f()
{
}
void call_f()
{
f();
}
class C
{
void f()
{
call_f();
}
};
}