Re[5]: Практика использования std::unique_ptr std::call_once std::once_flag
От: antropolog  
Дата: 02.12.15 07:19
Оценка:
Здравствуйте, xobotik, Вы писали:

X>КО? И каждый раз при записи в лог создавать экземпляр класса и вызывать функцию?

X>Вроде написал сценарий использования или напрасно ?

зачем все эти извращения с недосинглтонами, гонками и прочей ахинеей, когда можно сделать просто:

//loggger.h
//Интерфейс лога, подключается там, где нужно писать в лог
log(severety, message);


//logger_factory.h
//Интерфейс фабрики логгера, подключается только в одном файле - в main.cpp
initLog(filename)
deinitLog();


//logger.cpp
//Имплементация логгера
#include "loggger.h"
#include "logger_factory.h"


class Log {
  open(filename);
  close();
  writeToLog(severety, message);
};

Log global_log;

initLog(filename) {
  global_log.init(filename);
}

deinitLog(
  global_log.close();
}

log(severity, message) {
  global_log.writeToLog(severity, message);
}


и наконец main

#include "logger_factory.h"
main() {
  initLog( get_new_log_name() );
  ....
  deinitLog();
}


кому нужен лог — подключает logger.h и пишет в лог. Логгер инициализируется один раз явно в main. Код понятен даже ребёнку. Работает стабильно. Ошибиться очень тяжело. Повторяю вопрос — "Зачем делать через ж-у то, что можно сделать прямо и очевидным образом?"
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.