函数参数包含完整的函数
Function argument contains complete function
在我的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*)>
的东西,它被声明为删除器对象的类型。
相关文章:
- 函数何时会在c++中包含stack_Unwind_Resume调用
- g++ 说函数不存在,即使包含正确的标头
- 当调用switch语句中的函数时(即使函数不包含循环),似乎是永不结束的循环的问题
- 如果基类包含双指针成员,则派生类的构造函数
- 一个函数,用于查找字符串1包含字符串2 c++的次数
- 在作为静态成员包含在另一个类中的类的构造函数中使用 cout
- 仅包含可移动 std::map 的类的移动构造函数不起作用
- 复制包含C++所有元素的对象!(构造函数和赋值,最佳实践?
- 表达式 SFINAE:如何根据类型是否包含具有一个或多个参数的函数来选择模板版本
- 如果 x.h 仅由函数声明组成,为什么有必要在 x 中包含 x.h.cpp
- 如果函数包含静态变量,为什么编译器不执行内联?
- 为什么宏__STL_FUNCTION_MPL_PARTIAL_ORDER应该将模板函数包含在std_pair.h中
- 如果函数包含在命名空间中,则"go to beginning of the function"不起作用 (C++)
- 创建自己所需的函数比为某个函数包含整个库更可取吗
- cv::meanShift函数包含什么
- 是否应将析构函数包含在使用自动存储的指针中
- 函数包含未命名参数
- 如何使我的resize函数包含前一个向量的元素?
- 将头文件中的特定函数包含到c++代码中
- c++类的析构函数包含ptr到对象的数组