我想爲任意數組重載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; }' – 2012-02-23 21:31:32
如果你想要一個外部庫,爲什麼不使用http://www.boost.org/doc/libs/1_48_0/doc/html/boost_lexical_cast.html – pyCthon 2012-02-23 21:33:33
@Captain:'arr'實際上有'int * '在這種情況下,所以它不會匹配那個過載。 – 2012-02-23 21:49:51