Я хотел бы написать удобный интерфейс для моей очень простой библиотеки журналов. Возьмите два следующих фрагмента кода. Первый из них это то, что я делаю сейчас, вторая моя идея интуитивного интерфейса:Как написать iostream-подобный интерфейс для регистрации библиотеки?
std::ostringstream stream;
stream<<"Some text "<<and_variables<<" formated using standard string stream"
logger.log(stream.str()); //then passed to the logger
И
logger.convinient_log()<<"Same text "<<with_variables<<" but passed directly";
Мой мыслительный процесс-дизайн за что идея заключается в том, чтобы вернуть какой-то временный stringstream-like объект от logger.convinient_log()
функция. Этот объект уничтожения (я надеюсь, что это произойдет в конце строки или в подобном, удобном месте) будет собирать строку из себя и называть фактическим logger.log()
. Дело в том, что я хочу обрабатывать его целиком, а не по отдельности, так что log() может добавить, например. префикс и sufix для всей строки текста.
Я очень хорошо понимаю, что это может быть прямо невозможно или невозможно без какой-либо тяжелой магии. Если это так, то какой был бы почти-удобный способ сделать это и как его реализовать? Я ставлю на передачу некоторой специальной переменной, которая заставила бы операцию call-call-logger.log()
.
Если вы не знаете точного ответа, ресурсы по этой теме (например, расширение stringstream) также будут приветствоваться.
Возможный дубликат (http://stackoverflow.com/questions/511768/ как-to-use-my-logging-class-like-a-std-c-stream) – user4581301
Почти дубликат, я хочу что-то другое: я хочу обрабатывать весь ввод одного 'convient_log()' сразу, а не кусок ие части. Если вы говорите «удачи», есть ли у вас какие-либо улучшения (с точки зрения реализации и аналогичного удобства интерфейса)? Я был бы очень благодарен за это :) – psorek