C ++:为什么我不能在结构中使用lambda表达式?

时间:2016-07-27 02:02:07

标签: c++ struct lambda

我正在开发一个正在开发的文件系统的测试项目。部分代码将设备数据写入将保存设备名称,制造商,驱动器类型(CDR / CDRW / DVDRW / BLURAY / UDBR等等)以及设备中的介质的结构。这些将由windows中的shellapi.h中的ShellAPI函数返回。

然而,我遇到了一个问题。我决定创建一个通用函数来获取存储在结构中的数据,而不是创建4个单独的get指令。所以,我想我会使用lambdic表达式来使用开关来获取数据。但它不起作用。它会引发2个错误。

首先,我放置Lambic Expression的地方有问题。 Intellisense会抛出 此处不允许自动 错误。这个Lambda被放置在我的结构的受保护部分内,因此它可以引用私有数据。将其移出结构可以消除此错误,但可以使用私有数据来引用错误。

其次,当我初始化辅助自动语句 自动存储 时,我不太确定如何正确初始化它。我尝试将其分配为无效,以便我可以将任何其他对象推送到它,但显然 对于智能感知来说太模糊了

无论如何,我决定暂时回到4个获取/设置功能,但我想知道是什么原因引起了我的错误,以及我可以做些什么,以免下次犯同样的错误。

TL; DR: 为什么我不能在结构中使用lambda表达式?

TL; DR: 为什么无法自动初始化为void(0)?

这是导致错误的代码:

typedef struct _MBCS_INTERNAL_DISK_STRUCT
{
   private:
     LPCWSTR *MBCSDeviceName;   //Disk Device Name
     LPCWSTR *MBCSManufacturer; //Disk Device Manufacturer
     MBCSDiskType diskType;     //Disk Drive Type
     MBCSMediaType mediaType;   //Disk Media Type
   protected:

     //get specified value.
     auto MBCSGetSpecifiedValue = [](_MBCS_INTERNAL_DISK_STRUCT *mbcsids, int i) 
    //Error: Auto is not Allowed Here?
    {
      auto stor = void(0); //Error: Indistiguishable Auto Declaration. Auto cannot be void?
      switch (i)
      {
        case 1: stor = &mbcsids->MBCSDeviceName;
        break;
        case 2: stor = &mbcsids->MBCSManufacturer;
        break;
        case 3: stor = &mbcsids->diskType;
        break;
        case 4: stor = &mbcsids->mediaType;
        break;
       default: stor = (int)(-1);
      }
      return stor;
    };

   public:

    //constructor
    _MBCS_INTERNAL_DISK_STRUCT(LPCWSTR a, LPCWSTR b, MBCSDiskType dt, MBCSMediaType mt)
    {
      MBCSDeviceName = &a;
      MBCSManufacturer = &b;
      diskType = dt;
      mediaType = mt;
    }

    //destructor
    ~_MBCS_INTERNAL_DISK_STRUCT()
    {
    }

}MBCSInternalDiskStruct;

0 个答案:

没有答案