Función anónima C ++

Estoy tratando de usar la funciónsignal(int,void(*)(int)) desde<csignal> Para manejar la excepción de punto flotante SIGFPE. Me gustaría poder imprimir algunos diagnósticos útiles además de un mensaje que diga "Excepción de punto flotante" o algo parecido. Esto significa que la función que paso como el controlador parasignal Necesita acceso a algunos de los datos en mi código. Ahí está el problema.

La función debe volver.void y acepta solo 1 parámetro de tipoint. No puedo hacer que el manejador sea una función miembro de mi clase de almacenamiento de datos ya que entonces el tipo seríavoid(Foo::*)(int) debido a lo ocultothis puntero.

Pensé en usar lambdas para intentar hacer una función anónima como esta;

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

Sin embargo, debido a que la lambda captura la variabledata desde fuera del compilador no permitirá que se convierta en un puntero paravoid(*)(int) (lo que es una pena, ya que parece ser un uso ideal para las lambdas).

Simplemente podría hacerdata una variable global que luego podría verse enhandler pero detesto hacer esto por razones obvias.

Así que mi pregunta es así;¿Cuál es la mejor manera de imitar funciones anónimas en C ++??

Nota: Preferiría una solución nativa de C ++ y no tener que usar boost o equivalente.

Respuestas a la pregunta(2)

Su respuesta a la pregunta