我正在用C ++为我的应用程序创建一个logger类。此类具有静态成员以将调试输出记录到文件。我想创建一个可以两种方式使用的宏:
LOG("Log some text")
which calls Logger::log(std::string)
- - - - - - - - 或
LOG << "Log some text" << std::endl;
which calls Logger::getLogStream()
目标是包括Logger.h足以登录到文件,并且使用相同的语法完成,但如果您有其他建议,我并不特别关注Macros。不幸的是,使用Boost :: PP不是一种选择。
我looked around(see this comment),但没有发现有关区分LOG和LOG()的调用。如何区分一个参数和不参数?
答案 0 :(得分:3)
您可以重载Logger类的运算符并避免使用宏
class Logger
{
public:
void operator( )( const std::string& ar_text )
{
log( ar_text );
}
Logger& operator<<( const std::string& ar_text )
{
// use logStream here
return *this;
}
Logger& operator<<(std::ostream& (*f)(std::ostream&)) // This is necessary for grabbing std::endl;
{
// use logStream here
return *this;
}
};