重载{zero,one}个参数的预处理器宏

时间:2014-07-10 10:01:01

标签: c++ macros c-preprocessor

我正在用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 aroundsee this comment),但没有发现有关区分LOG和LOG()的调用。如何区分一个参数和不参数?

1 个答案:

答案 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;
    }
};