Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Нулевой поток, нужно ли включать ostream?

Автор вопроса: Pietro MОтветов: 1

Я пишу регистратор. Если отключено, это код, определяющий макрос LOG:

#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;

Это работает правильно. Компилятор должен полностью удалить код, связанный с макросом LOG.

Однако я хотел бы избежать включения ostream и определить объект logstream как что-то действительно "легкое", возможно, нулевое.

Благодарю вас!

c++nullstreamoptimization

Ответы

Ответ 1 · рейтинг 5 · Kerrek SB

Почему бы не реализовать все это с нуля:

struct nullstream { };

template <typename T>
nullstream & operator<<(nullstream & o, T const & x) { return o; }

static nullstream logstream;

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы