相关疑难解决方法(0)

匿名函数C++

我想使用的功能signal(int,void(*)(int)),从<csignal>处理浮点异常SIGFPE.我希望能够打印一些有用的诊断,除了只是一条消息说"浮点异常"或其他类似的东西.这意味着我作为处理程序传递的函数signal需要访问我的代码中的一些数据.这就是摩擦.

该函数必须返回void并仅接受1个类型的参数int.我不能使处理程序成为我的数据存储类的成员函数,因为那时类型将由void(Foo::*)(int)隐藏this指针引起.

我想过使用lambdas尝试创建这样的匿名函数;

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

但是因为lambda data从外部捕获变量,所以编译器不会将它强制转换为指针void(*)(int)(这是一种耻辱,因为这似乎是lambdas的理想用法).

我可以简单地创建data一个可以在其中看到的全局变量,handler但出于显而易见的原因我不愿意这样做.

所以我的问题是这样的; 在C++中模仿匿名函数的最佳方法是什么?

注意:我更喜欢本机C++解决方案而不必使用boost或等效.

c++ lambda anonymous-function c++11

15
推荐指数
2
解决办法
8176
查看次数

标签 统计

anonymous-function ×1

c++ ×1

c++11 ×1

lambda ×1