如何在 CPP 中解析联合中的结构
How to parse a structure in a union in CPP?
我有一个联合和枚举,例如:
typedef union{
Home HomeInfo;
Office OfficeInfo;
} Info;
typedef enum{
eHOME,
eOFFICE
} InfoType;
Home
和Office
是其他结构。
我还有另一个函数,其原型是
void SetInfo(InfoType, Info);
在函数调用期间,如果InfoType
eHOME
,我将创建一个 Info、Info info;
并填充HomeInfo
详细信息info.HomeInfo
并调用
SetInfo(eHONE, info);
设置信息定义:
SetInfo(InfoType infotype, Info info)
{
if (eHOME == infotype)
{
// get the details from info.HomeInfo structure
}
else if(eOFFICE == infotype)
{
// get the details from info.OffiiceInfo structure
}
}
如果我eHOME
传递InfoType
并传递OfficeInfo
的详细信息,我怎么能得到无效案例?虽然我曾经在这个时候获取HomeInfo
的详细信息,但其中有垃圾值,所以不会出错。检查后是否可以检查InfoType
结构是什么?
void SetInfo(InfoType a, Info b(;
也许您可以将 &b 强制转换为 Home*,然后将 Home 和 Office 的第一个"类变量"硬编码为一个字符,您可以使用特定值进行检测和初始化以便于检测。
这有什么意义吗,,,...
在这种情况下,您应该确保 Info 和 InfoType 在每次调用 Setinfo 时都是一致的。
如果您打算使用不一致的 Info 和 InfoType 调用 SetInfo,例如:
InfoType type = eHOME;
Info info;
info.OfficeInfo.xxx = xxx;
SetInfo(type, info);
基本上,作为一个联合,如果没有这两种类型的进一步信息,您无法区分信息是OfficeInfo还是HomeInfo。
检查是可能的。 info
本质上不是Home
或Office
。 它是一个字节块,您可以选择将其解释为任何一个,因为它是一个联合。
这似乎根本不是工会的好用处。 相反,Office
和Home
应该从共同的父母继承,比如Info
。 那么SetInfo
应该参考Info
,喜欢这个:
void SetInfo(Info &myInfo);
而且您需要一些工厂方法,知道它是否需要传入 Home
或 Office
的实例。
我不确定你在这里想实现什么,但这种方法几乎肯定是错误的。我建议在这里使用继承:
enum InfoType
{
eHome,
eOffice,
};
class Info
{
public:
InfoType type() const { return type_; }
protected:
Info(InfoType t) : type_(t) {}
private:
InfoType type_;
};
class HomeInfo : public Info
{
public:
HomeInfo() : Info(eHome) {}
};
class OfficeInfo : public Info
{
public:
OfficeInfo() : Info(eOffice) {}
};
现在SetInfo
功能非常简单:
void SetInfo(Info* info)
{
if (info->type() == eHome)
{
HomeInfo* hi = (HomeInfo*)info;
// ...
}
else if (info->type() == eOffice)
{
OfficeInfo* oi = (OfficeInfo*)info;
// ...
}
}
- 使用cpp中的结构和函数的多个学生条目
- 在头文件和 cpp 文件中使用一次 #pragma 时出现结构重定义错误
- 如何在cpp中删除(免费)多维结构内存?
- 从另一个 cpp 文件更改结构内、映射键内的变量
- 在.cpp文件之间传递结构声明,而不使用全局头文件
- OSX clang++:用于 cpp 文件中显式实例化模板的体系结构x86_64的未定义符号
- 在两个.cpp文件之间定义全局类/结构指针
- 如何大致将 cpp 代码结构转换为 python
- 标准 cpp 数据结构和线程互斥锁?
- 真的需要在 .h 和 .cpp 文件中分离 c++ 结构吗?
- 体系结构x86_64的未定义符号:c++/ h 文件和 cpp 文件
- 在 CPP 中初始化 typedef 结构变量
- 如何将 JSON 键值(我使用 cpp boost 解析)存储在相关数据结构中?
- CPP/C 中的常量用法和结构构造函数中的澄清
- cpp 初始值设定项太多 - 数组中的结构中的结构
- CPP 在读取结构数据时无限循环错误?
- cpp 中是否存在一种数据结构,可以轻松地提供一种基于已存在的实例构建新结构的方法
- 为什么在.h中定义的私有结构需要.cpp文件中的返回类型中的范围
- 我应该如何在 cpp 中设计结构?
- 内存优化结构cpp