Estoy escribiendo una clase que tiene varios mensajes de salida. Quiero que esta clase sea general y independiente de la plataforma, así que estoy pensando en pasarle una referencia basic_ostream y puede volcar todos los mensajes en la transmisión. Al hacer esto, si la clase se usa en un programa de consola, puedo pasarle std :: cout y mostrarla en la ventana de la consola.¿Cómo derivar de C++ std :: basic_ostream y hacer que el << operador sea virtual?
O podría pasar un ostream derivado y redirigir el mensaje a algunos componentes de la interfaz de usuario, p. ¿Cuadro de lista? El único problema es que el insertador de datos operator <<
no es una función virtual. Si paso la referencia de clase derivada a él, solo se llamará al operador basic_ostream < <.
¿Hay alguna solución para esto? propia respuesta
¿Por qué no utilizar la interfaz genérica 'std :: ostream' y cambiar el' stre subyacente ambuf' basado en su contexto? No se necesitan funciones virtuales. – mavam
No puede hacer que una función no miembro sea virtual. 'operator <<' no es miembro de 'basic_ostream', sino una función gratuita. –
@MatthiasVallentin: Pero necesito pasar la referencia de la clase base std :: ostream a mi clase. En tal caso, mi clase derivada del operador << de ostream 'nunca será llamada. –