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.

questionAnswers(2)

yourAnswerToTheQuestion