I'll try to explain what I'm trying to do:
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";
}
};
I'm trying to modify a LOGFILE definition so that it ONLY writes to a stream when used from within a class's member function based on the output of the if_filter_applies()
member function.
If LOGFILE is used from outside the class or in a static member function, I want it to use the Global if_filter_applies()
function (which always returns true).
The above code does not compile, because static void staticMem()
ends up using the if_filter_applies()
class member instead of the global.
I don't want to create a different definition similar to #define LOGFILE
as a replacement specifically for static member functions, because there are hundreds of files in our code and I don't want to replace all occurrences manually.
So are there any changes I can make to #defile LOGFILE
macro so that it calls ::if_filter_applies()
instead in the context of a static member function?