Desidero sovraccaricare lo operator<<
per gli array arbitrari, in modo che il codice cout << my_arr
funzionasse. Innanzitutto ho provato a sovraccaricare il secondo parametro di operator<<
su const T (&arr)[N]
, dove T
e N
sono parametri del modello. Ma testare il codice ha rivelato un effetto collaterale: const char[]
corrisponde anche alla specifica del tipo e il nuovo overload è in conflitto con quello definito nella classe stream. Esempio codice:Operatore di sovraccarico << per gli array
#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 */
}
È possibile implementare un operatore di stampa di array di questo tipo?
Non credo che N si trasferirà bene in molti casi. 'void f (int arr [], size_t N) {cout << arr; } –
se si desidera una libreria esterna, perché non utilizzare semplicemente http://www.boost.org/doc/libs/1_48_0/doc/html/boost_lexical_cast.html – pyCthon
@Captain: "arr' ha effettivamente il tipo" int * 'in tal caso, quindi non corrisponderebbe a tale sovraccarico. –