Chcę przeciążać operator<<
dla dowolnych tablic, tak aby zadziałał kod cout << my_arr
. Najpierw próbowałem przeciążyć drugi parametr operator<<
na const T (&arr)[N]
, gdzie T
i N
są parametrami szablonu. Ale testowanie kodu ujawniło efekt uboczny: const char[]
również pasuje do specyfikacji typu, a nowe przeciążenie powoduje konflikt z definicją zdefiniowaną w klasie strumienia. Przykład Kod:Przeciążenie operatora << dla tablic
#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 */
}
można taki operator drukowania matryca nadal realizowane?
Nie sądzę, że w dobrych przypadkach N będzie się dobrze przenosić. 'void f (int arr [], size_t N) {cout << arr; } ' –
jeśli chcesz zewnętrzną bibliotekę, po prostu użyj http://www.boost.org/doc/libs/1_48_0/doc/html/boost_lexical_cast.html – pyCthon
@Captain:' arr' faktycznie ma typ 'int * 'w takim przypadku, więc nie pasowałoby do tego przeciążenia. –