Quiero sobrecargar operator<<
para matrices arbitrarias, de modo que el código cout << my_arr
funcionaría. Primero intenté sobrecargar el segundo parámetro de operator<<
en const T (&arr)[N]
, donde T
y N
son parámetros de plantilla. Pero probar el código reveló un efecto secundario: const char[]
también coincide con la especificación de tipo, y la nueva sobrecarga entra en conflicto con la definida en la clase de flujo. Código de ejemplo:Operador de sobrecarga << para matrices
#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 */
}
¿Se puede implementar dicho operador de impresión de matriz?
No creo que N se transfiera bien en muchos casos. 'void f (int arr [], size_t N) {cout << arr; } ' –
si quiere una biblioteca externa, ¿por qué no usar simplemente http://www.boost.org/doc/libs/1_48_0/doc/html/boost_lexical_cast.html – pyCthon
@Captain:' arr' en realidad tiene el tipo 'int * 'en ese caso, entonces no coincidiría con esa sobrecarga. –