Я пытаюсь найти достойный способ ведения журналов из C ++.Мое текущее решение таково:
ostream & GetLog() { if( output == NULL ) throw error; return *output; }
Где вывод определен где-то и может быть файлом или чем-то еще.Это хорошо, но это не позволяет мне делать что-либо, кроме как выдавать ошибку, если выходные данные не выделены.Кроме того, моя программа многопоточная, и мне нужно получить блокировку, чтобы правильно проверить, что вывод не NULL, а затем записать в него, если это не так.В идеале любой код, использующий GetLog (), должен получить эту блокировку:
{
LockLog lock;
if( HasLog() )
GetLog() << "My dog ate " << n << " cookies!" << endl;
}
Мне кажется, это слишком много слов.Я хотел бы сделать что-то вроде
GetLog() << "My dog ate " << n << " cookies!" << endl;
и заставить его работать без ошибок, когда журнал не выделен (и с блокировкой), или функцию типа
WriteLog( "My dog ate " << n << " cookies!" << endl );
Iзнать с синтаксисом C printf это можно сделать с помощью функции переменного аргумента.Есть ли способ сделать это с синтаксисом C ++ и без макроса, который заставил бы меня в любом случае выставить функции GetLog, HasLog и LockLog?