Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何理解作为参数传递的函数定义_C++ - Fatal编程技术网

C++ 如何理解作为参数传递的函数定义

C++ 如何理解作为参数传递的函数定义,c++,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 = hidl

我可以看到很多语言在将函数作为参数传递时可以定义函数。但是,在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]);
        }
    } });
::android::hardware::camera::common::V1_0::Status err=::android::hardware::camera::common::V1_0::Status::OK;
std::矢量设备;
硬件::返回ret=
HIDLSCureCamera->getCameraIdList([&err,&devices](
::android::hardware::camera::common::V1_0::Status,
const hidl_vec和cameraDeviceIDs){
err=idStatus;
如果(错误==状态::确定){
对于(size_t i=0;i
如您所见,
getCameraIdList
的原型是
returnsecurecamera::getCameraIdList(getCameraIdList\u cb\u hidl\u cb)
。所以它只接受一个函数作为参数

但是,我无法理解
[&err,&devices]
的含义。它们已经是以前定义的变量。所以我应该能够直接使用它,为什么我需要
[&err,&devices]

但是,我无法理解
[&err,&devices]

这里有一个lambda函数

使用
[&err,&devices]
表示lambda函数通过引用捕获
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);
auto func=[&err,&devices](::android::hardware::camera::common::V1_0::Status,
const hidl_vec和cameraDeviceIDs)
{
err=idStatus;
如果(错误==状态::确定){
对于(size_t i=0;igetCameraIdList(func);

进一步阅读:

你问语法<代码> [&,呃,和设备] < /> >,还是你问什么因素告诉C++中lambda的设计方面?