簡體   English   中英

將位掩碼整數和枚舉存儲為相同的值。 怎么樣?

[英]Storing bitmask integer and enum in the same value. How?

我有位掩碼整數(例如0x0001、0x0002、0x0004、0x0008,...,0x4000)的舊類型。 我們決定重新設計整個產品,但具有向后兼容性。 因此,我們將所有內容(包括所有舊類型)都移入了一個枚舉。

想象我們正在談論椅子。 枚舉現在看起來像這樣:

enum Chairs
{
    OldChair1,
    OldChair2,
    OldChair3,
    NewChair1,
    NewChair2
};

我們目前正在將椅子存儲在文件中。 對於舊椅子,它們以位掩碼整數(例如1、2、4、8,...,4000)存儲。 現在,我們試圖將新椅子存儲在同一文件中,同時保持向后兼容性。

我們無法寫出枚舉的整數值,因為就位掩碼整數而言,“ 4”將對應於OldChair3,而對於枚舉而言,它將對應於newChair2。 由於寫入值必須向后兼容,因此它必須對應於OldChair3。

我們想到了使用一些我可以免費使用的EnumToString函數將舊椅子編寫為位掩碼整數,將新椅子編寫為字符串的想法。 這樣,當它是整數時,我們知道它是舊椅子,否則是新椅子。

但是,當從文件中讀回值時,我沒有任何StringToEnum可以使用,也不想創建一個。 創建StringToEnum時,我需要在多個位置指定可能的枚舉值。 在不久的將來,我本人以外的其他人可能會增加新的椅子。

關於如何將這些舊/新椅子以干凈的方式寫入文件/從文件中讀取,誰能想到任何巧妙的解決方案?

為新椅子分配不同的值,以免它們成為位掩碼:

enum Chairs
{
  OldChair1 = 0x00001,
  OldChair2 = 0x00002, 
  OldChair3 = 0x00004,
  NewChair1 = 0x80001,
  NewChair2  // 0x8002
 };

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM