我有这样的事情:
#include <iostream>
namespace N
{
typedef std::pair<int, double> MyPair;
std::ostream& operator << (std::ostream& o, MyPair const & mypair)
{
///
}
}
int main()
{
N::MyPair pr;
std::cout << pr;
}
这自然是行不通的,因为 ADL 找不到,operator<<
因为namespace N
没有关联MyPair
(很遗憾)。Afaik 可能不会添加到命名空间 std,所以如果我选择operator <<
在 std 中定义那将是非法的。那么......在这种情况下该怎么办?我不想明确限定operator <<
,也不想写using namespace N
。所以,问题是:
- 如何重构代码?
- 为什么 ADL 不关联 typedef 的命名空间?严重的原因?这会很好,例如在这种情况下。谢谢