Разрешить неоднозначный оператор в пространствах имен - PullRequest
1 голос
/ 15 марта 2012

Я создал собственную перегрузку << для 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<<, но ни один не работал.

Ответы [ 2 ]

5 голосов
/ 15 марта 2012

Вы должны взглянуть на 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 голос
/ 15 марта 2012

Возможно, вам следует просто использовать std::boolalpha и избавить себя от горя!

...