我会试着解释一下我要做的事情:
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()
吗?
答案 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
}