я пытаюсь написать класс протоколирования, где вы будете в состоянии сделать что-то вроде этогоC++ прохождение потока в методе класса
//Create an instance of a class
Log log;
log.debug() << "a string " << 42 << endl;
log.info() << "another string " << 41 << endl;
Это произведет следующий вывод на стандартный вывод
Info: a string 42
Debug: another string 41
Вот что я был в состоянии достигнуть до сих пор
#include <iostream>
#include <string>
#include <sstream>
#define endl '\n'
using std::cout;
using std::string;
using std::stringstream;
class Log {
public:
Log() {}
~Log() {}
//Create buffer to store everything
stringstream buffer;
//Create templase class to overload <<
template <class T>
inline Log & operator << (T data) {
buffer << data;
return *this;
}
inline Log & debug() {
print("Debug: ");
}
inline Log & info() {
print("Info: ");
}
inline void print(string type) {
//Display the contents of the buffer to standard output
cout << type << buffer.str();
//Clear the buffer
buffer.str(string());
}
};
int main() {
Log log;
log << "Hello " << "World " << 5 << " " << 2.3 << endl;
log.debug();
log << "Hello Again " << 42 << endl;
log.info();
return 0;
}
Это дает правильный вывод, но этот путь EAC h строка регистрации занимает две строки кода и очень громоздка. Может ли кто-нибудь уйти с пути, я могу сделать log.debug() < < «материал»? Это очень простой пример, в более поздних версиях вместо простой строки будут отметки времени, даты, имена пользователей и т. Д., Поэтому я пытаюсь получить каждый уровень журнала, обрабатываемый другой функцией.
Я предполагаю, что мне понадобится другой оператор перегрузки оператора, но я просто не могу понять, что это должно быть. Также текущий оператор шаблона < < не любит std :: endl (не компилируется, если я его использую), поэтому я просто устанавливаю endl = '\ n' вверху.
Заранее благодарим вас за перспективу обучения в максимально возможной степени.
Поиск в StackOverflow и в Интернете для «класса ведения журнала C++». Это было сделано раньше. –
have 'Log :: debug()' возвращает тип, который поддерживает оператор '<<'. Вы не совсем поняли, что вы пытаетесь сделать - если вы хотите, чтобы 'log.debug() <<" stuff "' обрабатывал '' stuff ''как параметр вашей функции' debug() ', тогда no , вы не можете этого сделать. Просто используйте параметры. –
Попробуйте вернуть ссылку ostream из 'debug()' и оттуда оттуда. – OMGtechy