Я создал свой собственный объект std::cout
, который записывает как std::cout
, так и в файл журнала.Правильный способ объявления/определения настраиваемого объекта cout-типа
В настоящее время я определяю его так, как это в файле заголовка, но я получаю неиспользованные переменные предупреждения.
Заголовочный файл <MyLib/Log.h>
static LOut { };
static LOut lo;
template<typename T> inline LOut& operator<<(LOut& mLOut, const T& mValue)
{
std::string str{toStr(mValue)};
std::cout << str;
getLogStream() << str;
return mLOut;
}
Использование:
#include <MyLib/Log.h>
...
lo << "hello!" << std::endl;
Если lo
быть static
? Должно ли lo
быть extern
?
Kudos для объяснения правильного способа объявления объекта cout
и отображения того, как это делают основные стандартные реализации библиотеки.
Edit: от cout
-как объекта, я имею в виду глобальную переменную, которая всегда доступна после включения соответствующего заголовка.
'станд :: cout' обычно просто' станд :: ostream' какой-то, с какой-то особый логику, чтобы обеспечить ее инициализацию достаточно рано и никогда не разрушаться; по крайней мере, один компилятор, который я знаю, использует специальные расширения для достижения этого. Но вам это обычно не нужно; если хуже, то вы можете использовать синглтон и написать 'log() << ...'. –