Tôi đang viết nhật ký. Nếu bị tắt, đây là mã xác định macro LOG:Dòng suối ruồi, tôi có phải bao gồm dòng trứng không?
#ifdef NO_LOG
#include <ostream>
struct nullstream : std::ostream {
nullstream() : std::ios(0), std::ostream(0) {}
};
static nullstream logstream;
#define LOG if(0) logstream
#endif
LOG << "Log message " << 123 << std::endl;
Nó hoạt động chính xác. Trình biên dịch nên loại bỏ hoàn toàn mã liên quan đến macro LOG.
Tuy nhiên tôi muốn tránh sự bao gồm của ostream và xác định đối tượng logstream như một cái gì đó thực sự "ánh sáng", có thể null.
Cảm ơn bạn!
Nó hoạt động, nhưng nó có thể tránh sự bao gồm của iostream? Ví dụ: có thể sử dụng cái gì khác thay vì std :: endl? –
@Pietro: chỉ cần thiết cho ví dụ, cho 'std :: endl'. 'nullstream' không cần nó, chỉ cần' '(các khai báo chuyển tiếp của' 'loại). –
@Pietro Thường thì có thể sử dụng '\ n' thay vì std :: endl. – UncleBens