【发布时间】:2012-03-14 08:38:58
【问题描述】:
我想为任意数组重载operator<<,这样代码cout << my_arr 就可以工作。首先我尝试在const T (&arr)[N] 上重载operator<< 的第二个参数,其中T 和N 是模板参数。但是测试代码发现了一个副作用:const char[] 也匹配类型规范,并且新的重载与流类中定义的重载冲突。示例代码:
#include <cstddef>
#include <iostream>
template<typename T, std::size_t N>
std::ostream& operator<<(std::ostream& os, const T (&arr)[N])
{
/* do stuff */
return os;
}
int main()
{
std::cout << "noooo\n"; /* Fails: ambiguous overload */
}
这样的数组打印算子还能实现吗?
【问题讨论】:
-
我认为 N 在很多情况下不会很好地转移。
void f(int arr[], size_t N){ cout<<arr; } -
如果你想要一个外部库,为什么不直接使用boost.org/doc/libs/1_48_0/doc/html/boost_lexical_cast.html
-
@Captain:
arr在这种情况下实际上具有int*类型,因此它与该重载不匹配。 -
@GeorgFritzsche 你是对的。一个简单的测试显示“错误:没有匹配函数调用‘operator
标签: c++ operator-overloading iostream