This question already has answers here:
What is a lambda expression in C++11?
(9个答案)
去年关闭。
我看到很多语言都可以在将函数作为参数传递时定义函数。但是,在C++中我无法理解某些内容,这是代码段。
如您所见,
但是,我无法理解
进一步阅读:https://en.cppreference.com/w/cpp/language/lambda
(9个答案)
去年关闭。
我看到很多语言都可以在将函数作为参数传递时定义函数。但是,在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
的原型(prototype)是Return<void> SecureCamera::getCameraIdList(getCameraIdList_cb _hidl_cb)
。因此,它仅接受一个函数作为参数。但是,我无法理解
[&err, &devices]
的含义。它们已经是之前定义的变量。所以我应该能够直接使用它,为什么我需要[&err, &devices]
? 最佳答案
您所拥有的是lambda函数。
使用[&err, &devices]
表示lamtda函数通过引用捕获了err
和devices
。
可以使用以下方法使它更具可读性:
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);
进一步阅读:https://en.cppreference.com/w/cpp/language/lambda