解决跨命名空间的模糊运算符

Coo*_*kie 1 c++ namespaces operator-keyword

我创建了自己的<<重载bool因为我希望它打印truefalse不是10.这通常有效,除非我离开我定义此运算符的命名空间.在那种情况下,我得到一个模糊的操作错误.

error C2593: 'operator <<' is ambiguous
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\ostream(206): could be 'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(std::_Bool)'
with
[
    _Elem=char,
    _Traits=std::char_traits<char>
]
c:\Dummy.h(43): or       'std::ostream &Dummy::operator <<(std::ostream &,bool)'
while trying to match the argument list '(std::basic_ostream<_Elem,_Traits>, bool)'
with
[
    _Elem=char,
    _Traits=std::char_traits<char>
]
Run Code Online (Sandbox Code Playgroud)

如何指定从哪个命名空间中获取运算符?我天真地尝试过Dummy::<<,Dummy::operator<<但都没有奏效.

Fil*_*efp 5

你应该看看std::boolalpha,但要回答你原来的问题:

#include <iostream>

namespace Dummy {
  std::ostream&
  operator<< (std::ostream& stream, bool f) {
    return stream << (f ? "7RU3" : "F4LS3");
  }
}

int
main (int argc, char *argv[])
{
  std::cerr      <<   true   <<  "\n";
  Dummy::operator<< (std::cerr, true);
}
Run Code Online (Sandbox Code Playgroud)

产量

1
7RU3
Run Code Online (Sandbox Code Playgroud)