c++ - 将函数定义作为参数传递时如何理解函数定义
问题描述
我可以看到有很多语言可以在将函数作为参数传递时定义它。但是在 C++ 中有一些我无法理解的东西,这里是片段。
::android::hardware::camera::common::V1_0::Status err = ::android::hardware::camera::common::V1_0::Status::OK;
std::vector<std::string> devices;
hardware::Return<void> ret =
hidlSecureCamera->getCameraIdList([&err, &devices](
::android::hardware::camera::common::V1_0::Status idStatus,
const hidl_vec<hidl_string>& cameraDeviceIDs) {
err = idStatus;
if (err == Status::OK) {
for (size_t i = 0; i < cameraDeviceIDs.size(); i++) {
devices.push_back(cameraDeviceIDs[i]);
}
} });
如您所见, 的原型getCameraIdList
是Return<void> SecureCamera::getCameraIdList(getCameraIdList_cb _hidl_cb)
。所以它只接受一个函数作为参数。
但是,我无法理解 的含义[&err, &devices]
。它们已经是之前定义的变量。所以我应该可以直接使用它,为什么我需要[&err, &devices]
?
解决方案
但是,我无法理解
[&err, &devices]
你有一个 lambda 函数。
的使用[&err, &devices]
表示err
并由devices
lambda 函数通过引用捕获。
这可以通过使用变得更具可读性:
auto func = [&err, &devices](::android::hardware::camera::common::V1_0::Status idStatus,
const hidl_vec<hidl_string>& cameraDeviceIDs)
{
err = idStatus;
if (err == Status::OK) {
for (size_t i = 0; i < cameraDeviceIDs.size(); i++) {
devices.push_back(cameraDeviceIDs[i]);
}
}
};
hardware::Return<void> ret = hidlSecureCamera->getCameraIdList(func);
推荐阅读
- javascript - 每 1 秒请求一次 HTTP 并使用来自响应的传入对象更新状态会延迟应用程序
- cplex - CPLEX 约束
- mongodb - 阻止猫鼬将字符串解释为(十六进制)数字
- python - 将值插入到单元格中,结果由 pandas 分组
- configuration - Acosix / alfresco-simple-content-stores:自定义类型的 TypeRoutingStore Null 错误
- python - 在 Jupyter 中检索分页 API 异步和 httpaio
- java - eclipse和我编译的程序之间的执行速度差异
- python - 由于某种原因,蛮力脚本在 26 个字时停止工作
- java - 如何为声纳规则找到过时的@SuppressWarnings?
- javascript - 使用自定义名称的 TikTok 开发者像素触发“ViewContent”事件