2016-08-26 13 views
7

Podczas tworzenia kodu mam wiele protokołów konsoli (std::clog) i niektóre dane wyjściowe konsoli (std::cout). Ale teraz, chciałem zrobić przedstawienie internetowego mojego kodu źródłowego i chcę wyłączyć wszystkie rejestrowania Console (clog), ale zachować wyjścia konsoli (cout)Jak wyłączyć rejestrowanie std :: clog z kodu źródłowego?

mogę pewno komentować wszystkie moje //std::clog, ale jest tam lepszy sposób na wyłączenie rejestrowania w moim pliku źródłowym?

+3

Czy [ta odpowiedź] (http://stackoverflow.com/a/30185095/3233393) pasuje do Twojego problemu? – Quentin

+1

Alternatywnie, 'std :: filebuf f; auto old = std :: clog.rdbuf (&f); 'na początku main i' std :: clog.rdbuf (old); 'na końcu może załatwić sprawę: –

+1

@Quentin działa' std :: clog.setstate (std :: ios_base :: failbit); 'usuń tylko wiadomości' clog' i nadal zachowuj 'cout' .Dziękuję ... (czy możesz napisać to jako odpowiedź) – Yeo

Odpowiedz

7

Można przekierować zatkanie, utworzyć własną funkcję przesyłania i użyć funkcji rdbuf.

std::ofstream nullstream; 
std::clog.rdbuf(nullstream.rdbuf()); 
1

Skopiowano z Andreas Papadopoulos' answer do nieco innego pytania - pamiętaj, aby go tam głosować!


Jasne, można (example here):

int main() { 
    std::clog << "First message" << std::endl; 

    std::clog.setstate(std::ios_base::failbit); 
    std::clog << "Second message" << std::endl; 

    std::clog.clear(); 
    std::clog << "Last message" << std::endl; 

    return 0; 
} 

Wyjścia:

First message 
Last message 

To dlatego oddanie strumień w fail stanie uczyni to po cichu usunąć wszelkie dane wyjściowe, dopóki failbit jest wyczyszczone.

+0

Dla przypomnienia, zrobiłem tę odpowiedź CW, ponieważ powiązane pytanie jest inne (prosi również o przywrócenie strumienia), nie jest tak dobrze przedstawione jak to, a zaakceptowana odpowiedź omija problem zamiast go rozwiązywać. – Quentin

Powiązane problemy