Анонимная функция 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 или его эквивалент.