gpt4 book ai didi

c++ - 函数参数包含完整的函数

转载 作者:行者123 更新时间:2023-11-27 22:42:48 26 4
gpt4 key购买 nike

在我的 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 的实例.

关于c++ - 函数参数包含完整的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47057078/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com