我正在开发一个正在开发的文件系统的测试项目。部分代码将设备数据写入将保存设备名称,制造商,驱动器类型(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;