当前位置:  开发笔记 > 编程语言 > 正文

void指针可以指向lambda函数吗?

如何解决《void指针可以指向lambda函数吗?》经验,为你挑选了1个好方法。

为指针分配函数void指针,

double f_dummy(double x) { return x; }
...
    void *pv = f_dummy;  //compilation error

如本FAQ中所述,这是非法的.然而,答案以声明结束:

如果以上内容似乎适用于特定操作系统上特定版本的特定编译器,请不要给我发电子邮件.我不在乎.这是非法的,期间.

编辑:作为对他人的警告,我确实遇到了这种" 似乎工作 "的行为,通过涉及类模板的继承案例.没有编译器警告,没有意外的运行时行为.

这让我的OCD骨头发痒,让我想知道我一直在做什么,例如,

...
    auto l_func = [](double x){ return f_dummy(x); };
    void *pv = &l_func;
    auto pl = static_cast(pv);
    cout << (*pl)(5.) << endl; 

编译和运行干净(g++ -std=c++11 -Wall),是真正合法的.是吗?



1> Lightness Ra..:

是的,这是合法的,因为:

指向对象的指针可以void*再次投射到后面;

l_func 是一个对象(一个仿函数,具有未指定的类类型) - 这是lambda通过标准命令实现的方式.

您引用的FAQ文本是不相关的,因为它引用了函数的指针._yourUnspecifiedLambdaType::operator()是等效的*函数,但你在这里没有做任何事情.

*嗯,它甚至不等同,因为它是会员功能!

推荐阅读
TXCWB_523
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有