由于历史原因,我有一个位于顶级命名空间中的类。我需要为其定义一个函数,该函数必须使用依赖于参数的查找找到1。顶级命名空间是否被视为此类的关联命名空间,还是我必须采取一些解决方法?
1否则使用它的模板可能找不到它,因为模板后定义的符号只有在 ADL 找到时才能看到。
最佳答案
全局命名空间在这方面并不特殊,它的工作方式与任何其他命名空间一样,因此非常适合您的用例。
Live example 1全局命名空间的工作。
Live example 2 ADL 实际上是 #1 起作用的原因1。
这是实例的文本:
#include <iostream>
struct X {};
template <class T>
void bar(T t)
{
foo(t);
}
void foo(X x)
{
std::cout << "Foo\n";
}
int main()
{
X x;
bar(x);
}
1 这会失败,因为 ADL 找不到该函数,而正常查找会。因此,它证明 #1 确实有效,这要归功于 ADL。
关于c++ - 顶级命名空间中类的参数依赖查找?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23603576/