Função Anônima C ++

Eu estou tentando usar a funçãosignal(int,void(*)(int)) de<csignal> para manipular a exceção de ponto flutuante SIGFPE. Eu gostaria de poder imprimir alguns diagnósticos úteis além de uma mensagem dizendo "Exceção de ponto flutuante" ou algo assim. Isso significa que a função que eu passo como o manipulador parasignal precisa de acesso a alguns dos dados no meu código. Aí reside o atrito.

A função deve retornarvoid e aceita apenas 1 parâmetro do tipoint. Eu não posso fazer o manipulador uma função de membro da minha classe de armazenamento de dados desde então o tipo seriavoid(Foo::*)(int) devido ao ocultothis ponteiro.

Pensei em usar o lambdas para tentar fazer uma função anônima como essa;

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

no entanto porque o lambda captura a variáveldata de fora do compilador não vai deixá-lo ser convertido em um ponteiro paravoid(*)(int) (O que é uma vergonha, pois isso parece ser um uso ideal para lambdas).

Eu poderia simplesmente fazerdata uma variável global que poderia então ser visto emhandler mas estou relutante em fazer isso por razões óbvias.

Então minha pergunta é assim;qual é a melhor maneira de imitar funções anônimas em C ++?

Nota: Eu preferiria uma solução C ++ nativa e não teria que usar boost ou equivalente.

questionAnswers(2)

yourAnswerToTheQuestion