Anonimowa funkcja C ++
Próbuję użyć tej funkcjisignal(int,void(*)(int))
z<csignal>
do obsługi wyjątku zmiennoprzecinkowego SIGFPE. Chciałbym być w stanie wydrukować kilka użytecznych diagnostyki oprócz wiadomości z informacją „Wyjątek zmiennoprzecinkowy” lub coś takiego. Oznacza to funkcję, którą przekazuję jako program obsługisignal
potrzebuje dostępu do niektórych danych w moim kodzie. W tym leży pocieranie.
Funkcja musi wrócićvoid
i zaakceptuj tylko 1 parametr typuint
. Nie mogę uczynić programu obsługi funkcją członkowską mojej klasy przechowywania danych od tego czasuvoid(Foo::*)(int)
ze względu na ukrytethis
wskaźnik.
Myślałem o użyciu lambd do wypróbowania takiej anonimowej funkcji;
void handler(int nSig, Foo data)
{
// do something
}
// snip
Foo data;
signal(SIGFPE, [&](int nSig)->void{handler(nSig,data);});
jednak ponieważ lambda przechwytuje zmiennądata
z zewnątrz kompilator nie pozwoli na rzutowanie na wskaźnik dovoid(*)(int)
(co jest wstydem, ponieważ wydaje się to idealnym rozwiązaniem dla lambd).
Mógłbym po prostu zrobićdata
zmienna globalna, którą można następnie zobaczyć whandler
ale nie chcę tego robić z oczywistych powodów.
Tak więc moje pytanie jest takie;jaki jest najlepszy sposób naśladowania anonimowych funkcji w C ++?
Uwaga: Wolałbym natywne rozwiązanie C ++ i nie musiałem używać boosta lub jego odpowiednika.