Я пытаюсь найти достойный способ ведения журнала с C++. Мое текущее решение таково:Функция WriteLog (...) в 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);
Я знаю, что с C Printf синтаксис это можно сделать с помощью функции переменных аргументов. Есть ли способ сделать это с синтаксисом C++ и без макроса, который заставил бы меня в любом случае разоблачить функции GetLog, HasLog и LockLog?
Если вам нравится 'printf', что мешает вам использовать его? Он находится внутри ''. –
zneak
@zneak, очевидно, моя проблема не в том, где найти printf. Я просто привык к синтаксису iostream, и весь мой код написан с его использованием, но в любом случае спасибо. – Scott