我使用枚舉來表示系統中的所有信號,並且存在枚舉中表示的基本信號,但我想通過調用函數向其添加其他信號或像這樣的 我可以在另一個枚舉插入?如何在C++中將枚舉插入另一個枚舉
回答
你不能擴展枚舉本身,當然不是在運行時(這是毫無意義的,因爲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
基本上是有限制值的整數,所以你必須驗證限制等
如果您有訪問原始的源代碼(我假設你這樣做......)這將是更好地改變原來的枚舉,恕我直言。
枚舉實際上在編譯時將一個標識符映射到一個整數。你不能在運行時改變它。但是對於運行時的模擬將是一個std::map<std::string, int>
,在這種情況下,你可以在運行時按如下所示添加新值:根據您最近的答覆
std::map<std::string, int> values;
// add new values in this way
values.insert("var1", 100);
,我的猜測是,你想擁有的枚舉代碼列表,並且您想要隨意修改該列表?
如果是這種情況,那麼只需創建一個列表/向量/集合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
}
我認爲這將有助於我的代碼,謝謝:) 但我有一個問題是什麼設置
我不知道我是否理解你的問題。你在問什麼是
我想要訪問另一個函數中的枚舉而不是主函數 – fank 2011-06-16 10:25:04
- 1. 將枚舉設置爲C#類中的另一個枚舉
- 2. 將多個列表枚舉值寫入另一個枚舉
- 3. 如何導入另一個枚舉成我的枚舉
- 4. 如何枚舉Objective-C中的枚舉?
- 5. 如何將一個枚舉轉換爲另一個枚舉在Java中?
- 6. C#枚舉指向另一個枚舉(重構)
- 7. 如何將C++枚舉複製到Objective C枚舉中
- 8. 如何使用枚舉來定義另一個枚舉?
- 9. 你如何使用枚舉與另一個枚舉?
- 10. 將C++枚舉導入C#
- 11. 在枚舉中枚舉
- 12. 如何將一個枚舉的元素映射到另一個枚舉?
- 13. 如何將一個枚舉值轉換/分配給另一個枚舉
- 14. MySQL插入(枚舉?)
- 15. 在C中傳入枚舉
- 16. 變量指向一個枚舉或另一個枚舉?
- 17. 地圖一個枚舉另一個枚舉
- 18. Python 3枚舉:枚舉繼承另一個枚舉不起作用?
- 19. C++ - 程序中的多枚舉枚舉
- 20. Java枚舉:從另一個枚舉中收集信息
- 21. 使用另一個枚舉中的特定值創建枚舉
- 22. 如何在保持枚舉枚舉
- 23. 在C#枚舉#
- 24. 枚舉在C++
- 25. 枚舉在C
- 26. 如何定義一個枚舉有多個值,這是另一個枚舉
- 27. C#枚舉如何檢查枚舉中是否存在描述
- 28. 如何使一個枚舉項目具有另一個枚舉的項目?
- 29. C#實例枚舉從另一個
- 30. C++使用枚舉從另一個類
更詳細,如果可能的代碼示例,您的意思,請解釋一下。現在不清楚你在問什麼。 – Jesper 2011-06-16 09:30:51
您想在運行時將新的枚舉值添加到枚舉嗎?這是不可能也不必要的,因爲它們被編譯爲字面整數,所以你可以使用任何其他的int值來擴展你的enum – 2011-06-16 09:31:23
[在C++中擴展枚舉?](http://stackoverflow.com/問題/ 1804840 /擴展枚舉在C) – 2011-06-16 09:42:26