[英]How to Parse the XML structure data in CPP while going and accessing each node?
[英]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定義:
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
之后是否可以檢查結構是什么?
我不確定您要在這里實現什么,但是這種方法幾乎肯定是錯誤的。 我建議在這里使用繼承:
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;
// ...
}
}
void SetInfo(InfoType a,Info b);
也許您可以將&b強制轉換為Home *,然后將Home和Office的第一個“類變量”硬編碼為一個char,您可以檢測到該char並使用特定值對其進行初始化以便於檢測。
這有道理嗎,,,...
在這種情況下,您應確保在每次SetInfo調用中Info和InfoType都一致。
如果您打算使用不一致的Info和InfoType調用SetInfo,例如:
InfoType type = eHOME;
Info info;
info.OfficeInfo.xxx = xxx;
SetInfo(type, info);
基本上,作為一個聯合,如果沒有這兩種類型的進一步信息,則無法區分info是OfficeInfo還是HomeInfo。
這種檢查是可能的。 info
本質上不是Home
或Office
。 它是一個字節塊,您可以選擇將其解釋為一個字節,因為它是一個聯合。
這似乎根本不是一個工會的好用處。 Info
表示, Office
和Home
應該從同一個父級繼承。 然后SetInfo
應該引用Info
,如下所示:
void SetInfo(Info &myInfo);
並且您將需要一些工廠方法來知道它是否需要傳入Home
或Office
實例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.