Я хотел бы написать функцию для ведения журнала, который должен быть использован, как это:Функция регистрации, которая использует оператор <<
log(__FILE__) << "My message containing integer: " << 123 << " and double: " << 1.2;
Это должно напечатать следующую строку, добавьте Endl и немедленно промойте:
main.cpp: My сообщение, содержащее целое число: 123 и дважды: 1,2
Мои (упрощенный) попытка для реализации функции:
class Writer
{
public:
template<typename T>
Writer & operator<<(T t)
{
cout << t << endl;
cout.flush();
return (*this);
}
};
Writer log(const char* fileName)
{
cout << fileName << ": ";
return Writer();
}
int main(int argc, const char *argv[])
{
log(__FILE__) << "My message containing integer: " << 123 << "and double: " << 1.2;
return 0;
}
Моя проблема заключается в том, что из-за LR ассоциативности оператора < < выход:
main.cpp: My сообщение, содержащее число:
и дважды:
1.2
Есть ли способ реализовать эту функцию или мое требование для ее использования неосуществимо?
В идеале я бы хотел использовать простой C++ 03 (т. Е. Нет возможностей C++ 11, повысить и нестандартные библиотеки).
Просто, чтобы быть ясным: что нужно очищать, когда и что должно быть на какой линии? Например: где эта часть «double ...» входит в ваш первый пример? –
@BaummitAugen Извините, отредактировано, исправлено. – bedrorom