我将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); } );
答案 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
。