函数参数包含完整的函数

Function argument contains complete function

本文关键字:函数 包含完 参数      更新时间:2023-10-16

在我的C++库代码中,我看到了以下行

 m_libs[ library_name ] = lib_ptr_t( handle, [](void*d){ dlclose(d); });

lib_prt_t .hpp 中声明为

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

谁能解释一下,第二个参数中有一个完整的函数或其他东西。我不明白这是什么意思?

[](void*d){ dlclose(d); }是一个

lambda表达式。

创建类的实例是简写的,大致如下所示:

struct anonymous_name {
  void operator()(void* d) { dlclose(d); }
};

(我跳过了一些小差异,在这里无关紧要)。 anonymous_name不是生成的类的真实名称,而是被赋予一个无法命名的名称。

可以像函数一样调用anonymous_name实例。

现在,std::function<void(void*)>是一个对象,它使用一种称为"类型擦除"的技术来存储几乎所有可以使用签名void(void*)调用的内容。 这包括函数指针或函数对象(如 anonymous_name 的实例)。

第二个参数是std::unique_ptr的 deleter 函数对象,在本例中它是一个 lambda,但它可以是任何可隐式转换为 std::function<void(void*)> 的东西,它被声明为删除器对象的类型。