Piszę klasy, która ma różne komunikaty wyjściowe. Chcę uczynić tę klasę ogólną i niezależną od platformy, więc myślę o przeniesieniu do niej odniesienia basic_ostream i może ona zrzucić wszystkie wiadomości do strumienia. Robiąc to, jeśli klasa jest używana w programie konsolowym, mogę przekazać do niej std :: cout i wyświetlić w oknie konsoli.Jak wyprowadzić z C++ std :: basic_ostream i ustawić operator << w wirtualny?
Mogę też przekazać wyprowadzony ostream i przekierować komunikat do niektórych składników interfejsu użytkownika, np. Skrzynka na listy? Jedyny problem polega na tym, że wprowadzający dane operator <<
nie jest funkcją wirtualną. Jeśli przekazuję do niej odwołanie do klasy pochodnej, zostanie wywołany tylko operator < <.
Czy istnieje sposób obejścia tego problemu? własna odpowiedź
Dlaczego nie używać ogólnego interfejsu 'std :: ostream' i zmieniać ukryte' stre ambuf' w oparciu o twój kontekst? Brak funkcji wirtualnych. – mavam
Nie można uczynić funkcji nie należącej do elementu wirtualnego. 'operator <<' nie jest członkiem 'basic_ostream', ale jest funkcją bezpłatną. –
@MatthiasVallentin: Ale muszę przekazać klasy podstawowej std :: ostream odniesienie do mojej klasy. W takim przypadku moja klasa pochodna z operatora << ostream nigdy nie zostanie wywołana. –