Lambda Expression等效C ++代码

时间:2017-11-02 12:21:39

标签: c++ lambda

我将gcc编译器的4.9.2降级到4.4.1,因为我知道4.4.1不支持lambda表达式。在以下代码中,使用lambda表达式[](void*d){ dlclose(d); }并由于lambda表达式而面临错误。任何人都可以帮助如何在没有lambda表达式的情况下使用下面的代码吗?

using libs_t = std::unique_ptr<void,std::function<void(void*)>>;

我用以下内容替换了以上行,但gcc 4.4.1也不支持

typedef std::unique_ptr<void,std::function<void(void*)>> libs_t ;

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

2 个答案:

答案 0 :(得分:3)

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

typedef std::unique_ptr<void, int ( * )(void *)> libs_t ;
libs_t(handle, &dlclose);

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

答案 1 :(得分:1)

试试dlclose

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

void mydlclose(void* p){ dlclose(p); }

并使用mydlclose