Ленивая оценка с помощью операторов ostream C ++

Я ищу переносимый способ реализовать ленивую оценку в C ++ для класса регистрации. Допустим, у меня есть простая функция журналирования, такая как

void syslog(int priority, const char *format, ...);

, тогда в функции syslog () мы можем сделать:

if (priority < current_priority)
  return;

, поэтому мы никогда не вызываем функцию форматирования (sprintf). С другой стороны, если мы используем поток регистрации, такой как

log << LOG_NOTICE << "test " << 123;

, все форматирование всегда выполняется, что может занять много времени. Есть ли возможность использовать все преимущества ostream (например, пользовательский оператор << для классов, безопасность типов, элегантный синтаксис ...) таким образом, чтобы форматирование выполнялось ПОСЛЕ проверки уровня ведения журнала?

8
задан SavinG 17 February 2011 в 23:07
поделиться