2011-06-16 186 views
1

我使用枚舉來表示系統中的所有信號,並且存在枚舉中表示的基本信號,但我想通過調用函數向其添加其他信號或像這樣的 我可以在另一個枚舉插入?如何在C++中將枚舉插入另一個枚舉

+2

更詳細,如果可能的代碼示例,您的意思,請解釋一下。現在不清楚你在問什麼。 – Jesper 2011-06-16 09:30:51

+0

您想在運行時將新的枚舉值添加到枚舉嗎?這是不可能也不必要的,因爲它們被編譯爲字面整數,所以你可以使用任何其他的int值來擴展你的enum – 2011-06-16 09:31:23

+0

[在C++中擴展枚舉?](http://stackoverflow.com/問題/ 1804840 /擴展枚舉在C) – 2011-06-16 09:42:26

回答

1

你不能擴展枚舉本身,當然不是在運行時(這是毫無意義的,因爲enum只是一個替代數字常量的文字列表)。

如果您實際上意味着要延長你的代碼中使用的常量的列表,請繼續閱讀:

你可以做的是讓另一枚舉,這將是「兼容」以這種方式(或類似):

enum { 
    E1_ONE, 
    E1_TWO, 
    E1_LAST, 
} base; 

enum { 
    E1_THREE = E1_LAST, 
    E1_FOUR, 
    E1_EXT_LAST, 
} extension; 

而且在代碼中使用的enum extension類型,你處理你的新價值,但enum base類型中,你擴展的遺留代碼。

enum基本上是有限制值的整數,所以你必須驗證限制等

如果您有訪問原始的源代碼(我假設你這樣做......)這將是更好地改變原來的枚舉,恕我直言。

4

枚舉實際上在編譯時將一個標識符映射到一個整數。你不能在運行時改變它。但是對於運行時的模擬將是一個std::map<std::string, int>,在這種情況下,你可以在運行時按如下所示添加新值:根據您最近的答覆

std::map<std::string, int> values; 

// add new values in this way 
values.insert("var1", 100); 
1

,我的猜測是,你想擁有的枚舉代碼列表,並且您想要隨意修改該列表?

如果是這種情況,那麼只需創建一個列表/向量/集合int。這將保存您的值,與您的枚舉類型無關(因爲所有枚舉都使用隱藏的整數值進行初始化)。然後,您可以隨意從此列表中添加/刪除項目。

例子:

enum SignalsA { 
     X, 
     Y, 
     Z 
}; 

enum SignalsB { 
     A, 
     B, 
     C 
}; 

int main(){ 

     std::set<int> signal_set; 

     signal_set.insert(Z); //Insert enum value from SignalsA 
     signal_set.insert(A); //Insert enum value from SignalsB 
} 
+0

我認爲這將有助於我的代碼,謝謝:) 但我有一個問題是什麼設置因爲我想做一個單獨的功能中的最後兩行不是在主要功能 – fank 2011-06-16 10:20:50

+0

我不知道我是否理解你的問題。你在問什麼是是? Set是一個關聯容器,您可以在其中存儲多種類型,並通過它們的值訪問它們。文檔在這裏: http://www.cplusplus.com/reference/stl/set/ 你可以製作單獨的函數,接收std :: set &和一個int,然後只需將該int插入到在函數參數中設置列表。 – Daniel 2011-06-16 10:24:00

+0

我想要訪問另一個函數中的枚舉而不是主函數 – fank 2011-06-16 10:25:04