Estoy tratando de escribir mi propia clase de registro y utilizarlo como una corriente:corriente de C++ como un parámetro cuando la sobrecarga de operadores <<
logger L;
L << "whatever" << std::endl;
Este es el código Empecé con:
#include <iostream>
using namespace std;
class logger{
public:
template <typename T>
friend logger& operator <<(logger& log, const T& value);
};
template <typename T>
logger& operator <<(logger& log, T const & value) {
// Here I'd output the values to a file and stdout, etc.
cout << value;
return log;
}
int main(int argc, char *argv[])
{
logger L;
L << "hello" << '\n' ; // This works
L << "bye" << "alo" << endl; // This doesn't work
return 0;
}
Pero yo estaba recibiendo un error al intentar compilar, diciendo que no había una definición para el operador < < (cuando se utiliza std :: endl):
pruebaLog.cpp:31: error: no match for ‘operator<<’ in ‘operator<< [with T = char [4]](((logger&)((logger*)operator<< [with T = char [4]](((logger&)(& L)), ((const char (&)[4])"bye")))), ((const char (&)[4])"alo")) << std::endl’
Por lo tanto, he intentado sobrecargar al operador < < para aceptar este tipo de transmisiones, pero me está volviendo loco. No sé cómo hacerlo. He estado buscando alojamiento en, por ejemplo, la definición de std :: endl en el archivo de cabecera ostream y escrito una función con esta cabecera:
logger& operator <<(logger& log, const basic_ostream<char,char_traits<char> >& (*s)(basic_ostream<char,char_traits<char> >&))
Pero no hubo suerte. He intentado usar las mismas plantillas en lugar de usar directamente char, y también intenté simplemente usar "const ostream & os", y nada.
Otra cosa que me molesta es que, en la salida de error, el primer argumento a favor del operador < < cambios, a veces es una referencia a un puntero, a veces se parece a una doble referencia ...
posible duplicado de [std :: endl es de tipo desconocido al sobrecargar al operador <<] (http://stackoverflow.com/questions/1134388/stdendl-is-of-unknown-type-when-overloading-operator) – sth
Buena pregunta. Me encontré con este mismo problema la semana pasada. Triste voz de la experiencia en las respuestas a continuación ... –
@ T.E.D .: Um ... gracias? –