首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >等效Lambda表达式的C++代码

等效Lambda表达式的C++代码
EN

Stack Overflow用户
提问于 2017-11-02 20:21:39
回答 2查看 135关注 0票数 1

我把gcc编译器的版本从4.9.2降到了4.4.1,因为我知道4.4.1不支持lambda表达式。在下面的代码中,使用了一个拉姆达表达式[](void*d){ dlclose(d); },并且由于拉姆达表达式而面临错误。有没有人能帮我在没有lambda表达式的情况下使用下面的代码?

代码语言:javascript
复制
using libs_t = std::unique_ptr<void,std::function<void(void*)>>;

我用下面的代码替换了上面的代码行,但这也不受gcc 4.4.1的支持

代码语言:javascript
复制
typedef std::unique_ptr<void,std::function<void(void*)>> libs_t ;

m_libs[ lib_name ] = libs_t ( handle, [](void*d){ dlclose(d); } );
EN

回答 2

Stack Overflow用户

发布于 2017-11-02 20:32:41

您可以重新定义unique_ptr专门化以接受原始函数指针而不是std::function

代码语言:javascript
复制
typedef std::unique_ptr<void, int ( * )(void *)> libs_t ;
libs_t(handle, &dlclose);

在这种情况下,使用std::function似乎是多余的,因为唯一应该存储在其中的项是指向dlclose函数的指针。

票数 3
EN

Stack Overflow用户

发布于 2017-11-02 20:25:23

试试dlclose吧。

不,真的。它可能会遇到void返回值的问题,但如果发生这种情况,请编写

代码语言:javascript
复制
void mydlclose(void* p){ dlclose(p); }

并使用mydlclose

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47075190

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档