Я пытаюсь сделать простую библиотеку регистрации только для себя. Я знаю, что существует несколько раз, но я не нашел ни одной, только маленькой и очень «C++», такой как библиотека регистрации, которая вписывается в мое приложение.Остановить оператора переопределения <<
В настоящее время у меня есть следующий синтаксис:
logger << debug << "A debug message" << end; //debug and end is my custom manipulators
Я выполнил все необходимые оператору < < и он прекрасно работает, особенно когда она имеет обратную совместимость с станд :: ostream. Но мне интересно, просто для эффективности, если это почему прекратить оценивать что-либо, если какое-то сообщение не должно регистрироваться (после отладки в примере)? Сделать все после того, как манипулятор серьезности «исчезнет»?
Только сейчас у меня есть следующий код короче:
template <typename Type>
Logger & Logger::operator<<(const Type & message)
{
if(this->get_message_level() <= this->get_severity())
{
BOOST_FOREACH(std::ostream* stream, this->_sinks)
{
*stream << message;
}
}
return *this;
}
Logger & Logger::operator<< (Logger & (*pf)(Logger&))
{
return pf(*this);
}
Logger & debug(Logger& logger)
{
logger.lock();
logger.set_severity(7);
//...
return logger;
}
Logger & end(Logger& logger)
{
logger << std::endl;
logger.unlock();
return logger;
}
Спасибо заранее.
Я предполагаю, что существует несколько разных степеней, и что «отладка» является лишь одним из них. Таким образом, вы можете захотеть чего-то более похожего на «LOG (logger, debug,« x = »<< x)» и '#define LOG (LOGGER, SEVERITY, ARG) do {if (want_log _ ## THEVERITY) {(LOGGER) << (БЕЗОПАСНОСТЬ) << ARG << конец; } while (0) '. –
@SteveJessop Если существует несколько ограничений, и вы хотите иметь 0 стоимости дезактивированных, вам понадобятся несколько макросов: 'LOG_TRACE',' LOG_WARNING' и т. Д. И для чего-либо, кроме 0 стоимости, есть лучшие решения , –
Просто интересно, но почему 'extern 'C" 'на булевом? (Я особенно задумываюсь о его использовании на 'bool', потому что C и C++ определяют« bool »в радикально разных манерах.) –