Anonyme Funktion C ++

Ich versuche die Funktion zu nutzensignal(int,void(*)(int)) von<csignal> zur Behandlung der Gleitkomma-Ausnahme SIGFPE. Ich möchte in der Lage sein, einige nützliche Diagnosen zu drucken, abgesehen von einer Meldung mit der Aufschrift "Gleitkomma-Ausnahme" oder etwas in diesem Sinne. Dies bedeutet die Funktion, an die ich als Handler übergebesignal benötigt Zugriff auf einige der Daten in meinem Code. Darin liegt die Reibung.

Die Funktion muss zurückkehrenvoid und akzeptiere nur 1 Parameter vom Typint. Ich kann den Handler nicht zu einer Member-Funktion meiner Datenspeicherklasse machen, da dies der Typ wärevoid(Foo::*)(int) wegen der verstecktenthis Zeiger.

Ich überlegte, Lambdas zu verwenden, um eine anonyme Funktion wie diese zu erstellen.

void handler(int nSig, Foo data)
{
    // do something
}
// snip
Foo data;
signal(SIGFPE, [&](int nSig)->void{handler(nSig,data);});

jedoch, weil das Lambda die Variable erfasstdata Von außerhalb lässt der Compiler nicht zu, dass er auf einen Zeiger verwandelt wird, auf den er verweistvoid(*)(int) (was schade ist, da dies eine ideale Verwendung für Lambdas zu sein scheint).

Ich könnte es einfach machendata eine globale Variable, die dann in gesehen werden konntehandler aber ich bin aus offensichtlichen Gründen abgeneigt, dies zu tun.

Meine Frage lautet also:Was ist der beste Weg, um anonyme Funktionen in C ++ nachzuahmen??

Hinweis: Ich würde eine native C ++ - Lösung bevorzugen und keinen Boost oder Ähnliches verwenden müssen.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage