C++ 依赖于参数的名称查找:添加要查找的额外命名空间
我想利用ADL规则检查额外命名空间中的函数: 假设我们有一个C++ 依赖于参数的名称查找:添加要查找的额外命名空间,c++,namespaces,argument-dependent-lookup,name-lookup,C++,Namespaces,Argument Dependent Lookup,Name Lookup,我想利用ADL规则检查额外命名空间中的函数: 假设我们有一个类X class X { ... }; 打电话 X x; f(x); 我希望编译器研究名称空间funky,到目前为止,它与类X无关。但我不想在调用f时,通过放置funky::f来混乱编码 实现这一点的一种方法是将类X定义为一个模板类,其参数来自名称空间funky template <typename Fake = funky::someClassFromFunky> class X { ... }; 模板
类X
class X
{
...
};
打电话
X x;
f(x);
我希望编译器研究名称空间funky
,到目前为止,它与类X
无关。但我不想在调用f
时,通过放置funky::f
来混乱编码
实现这一点的一种方法是将类X
定义为一个模板类,其参数来自名称空间funky
template <typename Fake = funky::someClassFromFunky>
class X
{
...
};
模板
X类
{
...
};
对于调用f(x)
,现在,编译器将确实查找funky::f
是否有更干净/更简单的方法来实现相同的行为?(特别是,在
类X
的声明中引用某个任意类someClassFromFunky
是很尴尬的。)您可以像这样将f导入命名空间:
using funky::f;
这是正确的答案。需要注意的关键是,您可以在调用点执行此操作,而不仅仅是在全局范围内。我的问题是,我有大量来自funky的函数,在类X上运行,我想使用这些函数(不只是f,而是大约15个不同的函数)。为这些函数中的每一个都放一个using语句会很烦人。@MattHurst:我建议为每一个函数做一个using声明,把它们放在一起。这样,如果您正在搜索函数名,很容易发现它是从另一个命名空间导入的。而且,这样使用语句会导致不同的行为。使用<代码>使用,编译器也会考虑<代码> Funky::F<代码>代码>调用<代码> int;f(y)@Matt:但是,如果
X
在它自己的名称空间中,并且您使用将放入该名称空间,那么只有在调用f(X)