Cercherò di spiegare quello che sto cercando di fare:Come dire se la funzione corrente è una funzione membro normale o statica in C++ 11?
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";
}
};
sto cercando di modificare una definizione FILELOG in modo che scrive solo un flusso quando viene utilizzato dalla funzione membro di una classe basata su l'output della funzione membro if_filter_applies()
.
Se LOGFILE viene utilizzato dall'esterno della classe o in una funzione membro statica, voglio che utilizzi la funzione Global if_filter_applies()
(che restituisce sempre true).
Il codice sopra riportato non viene compilato, poiché static void staticMem()
termina utilizzando il membro della classe if_filter_applies()
anziché quello globale.
Non voglio creare una definizione diversa simile a #define LOGFILE
come una sostituzione specifica per le funzioni membro statiche, perché ci sono centinaia di file nel nostro codice e non voglio sostituire tutte le occorrenze manualmente.
Quindi ci sono delle modifiche che posso apportare alla macro #defile LOGFILE
in modo che chiami ::if_filter_applies()
invece nel contesto di una funzione membro statico?
Date un'occhiata a [questo] (http://stackoverflow.com/questions/25863485/is-it-possible-to-bring-global-function-into-the-overload- risoluzione-con-membro? lq = 1) (sì, sono altrettanto deluso) –
Perché vuoi ** # defilare ** il tuo LOGFILE :( –
Non è davvero un file di registro per il mio caso d'uso, è in realtà un buffer circolare Ho appena creato LOGFILE per spiegare il mio problema :) – SidR