Индивидуальные & quot; ofstream & quot; выход

Я должен расширить класс ofstream, чтобы написать сервис потоковой регистрации.

Цель состоит в том, чтобы перехватить каждую строку, добавив в начало каждой строки настроенный текст (дата / время, серьезность и т. Д.).

Теперь ясно, что я не гуру C ++, поэтому я прочитал много документации об этой задаче, например,

http://www.angelikalanger.com/Articles/Topics.html#CPP
http://asmodehn.wordpress.com/2010/06/20/busy-c-coding-and-testing
http://gabisoft.free.fr/articles-en.html

Вышеупомянутые статьи предлагают написать собственный буфер потока, но при портировании этой концепции на файловые потоки я столкнулся с множеством трудностей.

Есть ли более простой метод для достижения этой цели?

2

Решение

Вам не нужно писать собственный буфер потока; самый простой и простой способ — создать класс, в который вы можете отправлять выходные данные, задав ему шаблонизированный оператор с одним аргументом<<():

template <typename T>
std::ostream& operator<<(const T& data_)
{
m_outstream << m_severity << "\t" << getTimeStamp() << "\t" << data_;

return m_outstream;
}

Где m_outstream — это некоторый тип std :: ostream (std :: ofstream и т. Д.). m_severity и getTimeStamp () являются примерами того, что вы можете вставить (и вы можете создать стандартный болотный оператор с двумя аргументами)<<() для форматирования и вывода типа серьезности в ostream).

Это позволяет вам делать такие вещи, как:

myLogger << "failingFunction(" << argument <<
"): Could not do something." << std::endl;

и вы получите вывод m_outstream, который выглядит так:

ПРЕДУПРЕЖДЕНИЕ 2012-01-03 19:32 failingFunction («значение аргумента»): не удалось что-то сделать.

Помимо этого, вам понадобится способ установить серьезность, который может быть таким же простым, как метод, вызываемый в классе регистратора, в который вы добавили оператор templatized<<() до. Если вы хотите стать по-настоящему модным, вы можете написать свой собственный манипулятор, который будет работать так же, как setw (), в std :: ostream. Увидеть http://www.math.hkbu.edu.hk/parallel/pgi/doc/pgC++_lib/stdlibug/man_6665.htm для начинающих на написание манипуляторов.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]