如何判断当前函数是C ++ 11中的常规函数​​还是静态成员函数?

时间:2016-03-30 05:21:46

标签: c++ c++11 static c-preprocessor static-members

我会试着解释一下我要做的事情:

bool if_filter_applies() {return true;}

#defile LOGFILE if( if_filter_applies() ) LOG_STREAM_OBJECT

void globalFunc() { LOGFILE << "Some data \n"; }

class C {
    int a;
    bool if_filter_applies() {
       if ( a == 1)
          return true;
       else
          return false;
       }
 public:
   void regMem () {
      LOGFILE << "Some data\n";
   }
   static void staticMem() {
      LOGFILE << "Some data\n";
   }
 };

我正在尝试修改LOGFILE定义,以便它只在基于if_filter_applies()成员函数的输出从类的成员函数中使用时才写入流。

如果从类外部或静态成员函数中使用LOGFILE,我希望它使用全局if_filter_applies()函数(总是返回true)。

上面的代码无法编译,因为static void staticMem()最终使用if_filter_applies()类成员而不是全局成员。

我不想创建一个类似于#define LOGFILE的不同定义作为静态成员函数的替代,因为我们的代码中有数百个文件,我不想手动替换所有出现的内容。

那么我可以对#defile LOGFILE宏进行任何更改,以便在静态成员函数的上下文中调用::if_filter_applies()吗?

1 个答案:

答案 0 :(得分:3)

If you're using MS Visual Studio, you can use the __if_exists检查this。如下所示:

__if_exists(this)
{
    // In a member function
}
__if_not_exists(this)
{
    // Not in a member function
}