我为<<
创建了自己的bool
重载,因为我希望它打印true
和false
而不是1
和0
。这通常有效,除非我离开我定义此运算符的命名空间。在那种情况下,我得到一个模糊的操作符错误。
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>
]
如何指定从哪个命名空间中获取运算符?天真地我尝试了Dummy::<<
和Dummy::operator<<
,但都没有效果。
答案 0 :(得分: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);
}
<强>输出强>
1
7RU3
答案 1 :(得分:1)
也许你应该只使用std::boolalpha
,并为自己保佑悲伤!