Необходимо реализовать operator <<
соответственно для класса. Общий шаблон похож на это:
template <typename T>
logger& operator <<(logger& log, T const& value) {
log.your_stringstream << value;
return log;
}
Уведомление, что это имеет дело с (не - const
) ссылки начиная с операции, изменяет Ваш регистратор. Также заметьте, что необходимо возвратиться log
параметр для объединения в цепочку для работы:
log << 1 << 2 << endl;
// is the same as:
((log << 1) << 2) << endl;
, Если бы самая внутренняя операция не возвратила ток log
экземпляр, все другие операции или перестали бы работать во время компиляции (неправильная сигнатура метода) или будут глотаться во времени выполнения.
Перегрузка вставки operator< < путь не состоит в том, чтобы пойти. Необходимо будет добавить перегрузки для всего endl или любых других определяемых пользователем функций.
способ пойти состоит в том, чтобы определить Ваш собственный streambuf, и связывать его в поток. Затем просто необходимо использовать поток.
Вот несколько простых примеров:
В классе Регистратора переопределите < < оператор.
Нажимают Here, чтобы знать, как реализовать < < оператор.
можно также избежать регистрирующихся операторов в коде с помощью Аспектно-ориентированного программирования.