我正在研究这个关于实现用户定义类型函数的最佳实践的微妙问题的迷人答案。(我的问题最初是由讨论向命名空间添加类型的非法性引起的。)swap
std
我不会在这里从上面链接的答案中重新打印代码片段。
相反,我想了解答案。
我在上面链接的答案在第一个代码片段下面,关于重载swap
namespace std
(而不是在该命名空间中专门化它):
如果你的编译器打印出不同的东西,那么它就没有正确地为模板实现“两阶段查找”。
然后答案继续指出,专业化swap
(namespace std
而不是重载它)会产生不同的结果(专业化情况下的期望结果)。
但是,答案是在另一种情况下进行的:专门为用户定义的模板类交换- 在这种情况下,再次没有达到预期的结果。
不幸的是,答案只是陈述了事实。它没有解释为什么。
有人可以详细说明该答案,并在该答案中提供的两个特定代码片段中描述查找过程:
swap
为用户定义的namespace std
非模板类重载(如链接答案的第一个代码片段)专注
swap
于namespace std
用户定义的模板类(如链接答案的最终代码片段)
在这两种情况下,都会调用泛型std::swap
,而不是用户定义的swap
。为什么?
(这将阐明两阶段查找的性质,以及实现用户定义的最佳实践swap
的原因;谢谢。)