Анонимная функция C ++

Я пытаюсь использовать функциюsignal(int,void(*)(int)) от<csignal> для обработки исключения с плавающей запятой SIGFPE. Я хотел бы иметь возможность распечатать полезную диагностику, кроме сообщения «Исключение с плавающей точкой» или что-то в этом роде. Это означает, что функция, которую я передаю в качестве обработчикаsignal нужен доступ к некоторым данным в моем коде. В этом и заключается загвоздка.

Функция должна возвращатьvoid и принимайте только 1 параметр типаint. Я не могу сделать обработчик функцией-членом моего класса хранения данных, так как тогда тип будетvoid(Foo::*)(int) из-за скрытогоthis указатель.

Я думал об использовании лямбда-выражений для создания анонимной функции, подобной этой;

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

however, потому что лямбда-переменная захватывает переменнуюdata извне компилятор не позволит привести его к указателю наvoid(*)(int) (это позор, так как это кажется идеальным использованием для лямбд).

Я мог бы просто сделатьdata глобальная переменная, которую затем можно увидеть вhandler но я не хочу этого делать по понятным причинам.

Так что мой вопрос таков; Какой лучший способ имитировать анонимные функции в C ++?

Примечание: я бы предпочел нативное решение C ++, а не использовать boost или его эквивалент.

Ответы на вопрос(3)

Ваш ответ на вопрос