myLogClass << "Line No: " << __LINE__ ...
С вашей operator <<
цепочкой не будет работать, так как она возвращает bool
.
bool myLogClass::operator << (const char * input)
Обычно определяют вставку потока следующим образом:
std::ostream& myLogClass::operator << (std::ostream& o, const char * input) {
// do something
return o;
}
Сделайте это:
#define log(o, s) o << "Line No: " << __LINE__ << \
" Function: " << __FUNCTION__ << \
" Error: " << s // note I leave ; out
Кроме того, вы можете заключить макрос в цикл do-while
:
#define log(o, s) do { o << "Line No: " << __LINE__ << \
" Function: " << __FUNCTION__ << \
" Error: " << s; \
} while(0) // here, I leave ; out
Тогда вы можете счастливо написать:
myLogClass myLogger; // do this
// use it
log(myLogger, "This is my error to be logged"); // note the ;