Sto scrivendo una classe che ha vari messaggi in uscita. Voglio rendere questa classe generale e indipendente dalla piattaforma, quindi sto pensando di passare un riferimento basic_ostream e può scaricare tutti i messaggi nello stream. In questo modo, se la classe viene utilizzata in un programma di console, è possibile passare a std :: cout e visualizzarla nella finestra della console.Come derivare da C++ std :: basic_ostream e rendere l'operatore << virtuale?
Oppure potrei passare ad un ostream derivato e reindirizzare il messaggio ad alcuni componenti dell'interfaccia utente, ad es. ListBox? L'unico problema è che l'inseritore di dati operator <<
non è una funzione virtuale. Se passo il riferimento alla classe derivata, verrà chiamato solo l'operatore basic_ostream < <.
C'è qualche soluzione per questo? propria risposta
Perché non utilizzare l'interfaccia generica 'std :: ostream' e modificare il' stre di base ambuf? basato sul tuo contesto? Non sono necessarie funzioni virtuali. – mavam
Non è possibile rendere virtuale una funzione non membro. 'operator <<' non è un membro di 'basic_ostream', ma una funzione libera. –
@MatthiasVallentin: Ma ho bisogno di passare il riferimento di classe base std :: ostream alla mia classe. In tal caso, la mia classe derivata dall'operatore << ostream non verrà mai chiamata. –