我把gcc编译器的版本从4.9.2降到了4.4.1,因为我知道4.4.1不支持lambda表达式。在下面的代码中,使用了一个拉姆达表达式[](void*d){ dlclose(d); },并且由于拉姆达表达式而面临错误。有没有人能帮我在没有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); } );发布于 2017-11-02 20:32:41
您可以重新定义unique_ptr专门化以接受原始函数指针而不是std::function
typedef std::unique_ptr<void, int ( * )(void *)> libs_t ;
libs_t(handle, &dlclose);在这种情况下,使用std::function似乎是多余的,因为唯一应该存储在其中的项是指向dlclose函数的指针。
发布于 2017-11-02 20:25:23
试试dlclose吧。
不,真的。它可能会遇到void返回值的问题,但如果发生这种情况,请编写
void mydlclose(void* p){ dlclose(p); }并使用mydlclose。
https://stackoverflow.com/questions/47075190
复制相似问题