Одной из возможных реализаций библиотеки было бы использование ленивых выражений для задержки форматирования записи журнала. По сути, выражение:
logger << "Hello, world!";
это будет лямбда-выражение, которое используется только в том случае, если фильтрация будет успешной. Хотя этот подход имеет преимущества, следует отметить, что ленивая конструкция выражения не является нулевой стоимостью с точки зрения производительности, размера кода и времени компиляции. Следующее выражение:
logger << "Received packet from " << ip << " of " << packet.size() << " bytes";
он будет генерировать значительное количество кода (пропорционально количеству потоковых операторов), который будет выполняться до фильтрации. Другим недостатком является то, что всегда называется пакет.size()
, независимо от того, записана ли запись в журнал. Для того, чтобы отложить этот вызов, необходимо еще больше строительных лесов, возможно, с участием Boost.Bind, Boost.Lambda или Boost.Phoenix. Это осложнение неприемлемо для такого базового варианта использования, как этот.
Хотя ленивая потоковая передача не обеспечивается библиотекой из коробки, ничто не мешает развивать ее в отдельной иерархии лесорубов. См. раздел Расширение библиотеки для получения дополнительной информации.