gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 00:56:36 25 4
gpt4 key购买 nike

我创建了自己的 << bool 过载因为我想让它打印 truefalse而不是 10 .这通常有效,除非我离开我在其中定义此运算符的 namespace 。在这种情况下,我会收到一个不明确的运算符错误。

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<<但都没有用。

最佳答案

你应该看看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

关于c++ - 解决跨命名空间的模糊运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9722892/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com