use*_*523 4 c++ logging c-preprocessor
我试图将一个简单的错误记录合并到我现有的应用程序中,此时它只报告错误使用,cout所以我希望使用<<运算符保持类似的界面.但是我希望它记录行和函数发生的错误,但我不想__LINE__, __FUNCTION__每次需要记录时都要输入.有没有人知道我可以用来允许__LINE__宏在另一个函数中使用的技巧,而是报告调用行?希望有道理.
class myLogClass {
uint8_t level;
public:
bool operator<<( const char * input );
};
bool myLogClass::operator<<( const char * input ) {
logItInSQL( input );
return true;
}
Run Code Online (Sandbox Code Playgroud)
而不是每次都这样
myLogClass << "Line No: " << __LINE__
<< " Function: " << __FUNCTION__
<< " Error: " << "This is my error to be logged";
Run Code Online (Sandbox Code Playgroud)
我想能够做到:
myLogClass << "This is my error to be logged";
bool myLogClass::operator<<( const char * input ) {
logItInSQL( " Line No: __LINE__" );
logItInSQL( " Function: __FUNCTION__" );
logItInSQL( " Error: " + input );
return true;
}
Run Code Online (Sandbox Code Playgroud)
myLogClass << "Line No: " << __LINE__ ...
Run Code Online (Sandbox Code Playgroud)
你的operator <<链接将无法正常工作,因为它返回了一个bool.
bool myLogClass::operator << (const char * input)
Run Code Online (Sandbox Code Playgroud)
通常按如下方式定义流插入:
std::ostream& myLogClass::operator << (std::ostream& o, const char * input) {
// do something
return o;
}
Run Code Online (Sandbox Code Playgroud)
做这个:
#define log(o, s) o << "Line No: " << __LINE__ << \
" Function: " << __FUNCTION__ << \
" Error: " << s // note I leave ; out
Run Code Online (Sandbox Code Playgroud)
此外,您可以将宏包装在do-while循环中:
#define log(o, s) do { o << "Line No: " << __LINE__ << \
" Function: " << __FUNCTION__ << \
" Error: " << s; \
} while(0) // here, I leave ; out
Run Code Online (Sandbox Code Playgroud)
然后你可以高兴地写:
myLogClass myLogger; // do this
// use it
log(myLogger, "This is my error to be logged"); // note the ;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9035 次 |
| 最近记录: |