可以给我一个不使用模板的 ADL 示例吗?从来没有见过这样的东西。我的意思是像 here .具体来说,我对导致上述一些陷阱的示例感兴趣。
编辑:
我认为 Tomalak 的回答可以延伸到陷阱。考虑一下:
namespace dupa {
class A {
};
class B : public A {
public:
int c;
B() {
}
};
void f(B b) {
printf("f from dupa called\n");
}
}
void f(dupa::A) {
printf("f from unnamed namespace called\n");
}
int main()
{
dupa::B b;
f(b);
return 0;
}
这里我们期望来自未命名命名空间的 f 将被调用,但取而代之的是调用另一个。
最佳答案
我无法向您展示导致陷阱的东西,但我可以展示ADL working without templates :
namespace foo {
struct T {} lol;
void f(T) {}
}
int main() {
f(foo::lol);
}
注意lol
的类型必须是class-type
;如您所见,我最初尝试使用内置的,但没有成功。
关于c++ - 没有模板的 ADL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6685515/