2016-08-26 15 views
7

Khi phát triển mã, tôi có nhiều bảng điều khiển ghi nhật ký (std::clog) và một số đầu ra bàn điều khiển (std::cout). Nhưng bây giờ, tôi muốn làm trình trực tuyến mã nguồn của tôi và tôi muốn vô hiệu hóa tất cả các giao diện điều khiển khai thác gỗ (clog) nhưng giữ giao diện điều khiển đầu ra (cout)Làm thế nào để vô hiệu hóa std :: clog đăng nhập từ mã nguồn?

tôi chắc chắn có thể bình luận tất cả các //std::clog của tôi, nhưng là có một cách tốt hơn để vô hiệu hóa tất cả đăng nhập bên trong tập tin nguồn của tôi ,?

+3

[câu trả lời này] (http://stackoverflow.com/a/30185095/3233393) có phù hợp với vấn đề của bạn không? – Quentin

+1

Cách khác, 'std :: filebuf f; tự động cũ = std :: clog.rdbuf (&f); 'ở đầu của chính và' std :: clog.rdbuf (cũ); 'ở cuối có thể làm các trick. –

+1

@Quentin nó hoạt động' std :: clog.setstate (std :: ios_base :: failbit); 'chỉ xóa các thông điệp' clog', và vẫn giữ nguyên 'cout'. Cảm ơn ... (bạn có thể viết nó như là câu trả lời) được không? – Yeo

Trả lời

7

Bạn có thể chuyển hướng làm tắc nghẽn, tạo dòng của riêng bạn và sử dụng hàm rdbuf.

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

Sao chép từ Andreas Papadopoulos' answer thành một câu hỏi hơi khác - hãy chắc chắn là bạn sẽ có mặt ở đó!


Chắc chắn, bạn có thể (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; 
} 

Đầu ra:

First message 
Last message 

Điều này là do việc đưa dòng trong fail nhà nước sẽ làm cho nó âm thầm loại bỏ bất kỳ đầu ra, cho đến khi failbit bị xóa.

+0

Đối với hồ sơ, tôi đã thực hiện câu trả lời CW này vì câu hỏi được liên kết là khác nhau (nó cũng yêu cầu khôi phục luồng), câu hỏi này không được trình bày tốt như câu hỏi này và câu trả lời được chấp nhận sẽ giải quyết vấn đề thay vì giải quyết nó. – Quentin

Các vấn đề liên quan