postaram się wyjaśnić, co próbuję zrobić:Jak stwierdzić, czy bieżąca funkcja jest regularną czy statyczną funkcją członka w 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";
}
};
Próbuję zmodyfikować definicję LOGFILE tak, że tylko pisze do strumienia, gdy używane od wewnątrz funkcji składowej klasy w oparciu o wyjście funkcji składowej if_filter_applies()
.
Jeśli funkcja LOGFILE jest używana spoza klasy lub funkcji statycznej, chcę, aby używała funkcji Global if_filter_applies()
(która zawsze zwraca wartość true).
Powyższy kod nie został skompilowany, ponieważ static void staticMem()
kończy się przy użyciu elementu klasy if_filter_applies()
zamiast globalnego.
Nie chcę tworzyć innej definicji podobnej do #define LOGFILE
jako zamiennika specjalnie dla funkcji statycznych, ponieważ w naszym kodzie są setki plików i nie chcę ręcznie wymieniać wszystkich wystąpień.
Czy są jakieś zmiany, które mogę wprowadzić w celu uzyskania makro w kontekście funkcji statycznego członka?
Zapraszamy do obejrzenia [to] (http://stackoverflow.com/questions/25863485/is-it-possible-to-bring-global-function-into-the-overload- rozdzielczość-z-członkiem? lq = 1) (tak jestem równie rozczarowany) –
Dlaczego chcesz ** # zbezcześcić ** twój LOGFILE :( –
To tak naprawdę nie jest plik dziennika dla mojego przypadku użycia, to jest faktycznie Okrągły bufor Właśnie stworzyłem LOGFILE, aby wyjaśnić mój problem :) – SidR