我想你想擁有
size = MaxNum
如果first == "MaxNum"
和
size = MinNum
如果first == "MinNum"
。如果first
(可供選擇的變量集)的可能值集合很小,則只需將該分配放在if
,else if
系列語句中即可。最後,將一條else
語句寫入一條錯誤消息。
但是,你必須硬編碼每一個案件:
if (first == "MaxNum") {
size = MaxNum;
}
else if (first == "MinNum") {
size = MinNum;
}
//...
所以你的代碼的分配決定size
隨着變量的數量增長較大。這被認爲是不好的風格,並且非常容易出錯不可維護。
如果你不想這樣做,不要在你的程序中使用幾個變量,而是一個包含所有這些可能的鍵和它們的值的容器變量。它被稱爲關聯容器,在C++中有std::map
類型,它實現了這樣的數據結構。
// Your container for the sizes (or whatever you want to call it)
std::map<std::string, int> sizes;
sizes["MinNum"] = 1;
sizes["MaxNum"] = 100;
// ... more values ...
// Accessing this container with a variable as the key:
size = sizes[first];
正如您所看到的,使用字符串變量作爲鍵訪問此容器非常容易。 sizes[first]
只是簡單地給出容器中的值,該值等於變量first
的當前內容的值。
有關C++(和C)源代碼的一個非常重要的事實是,在運行時您無法訪問變量的名稱。所以基本上,它們可以在不影響程序的情況下進行重命名。你想要的東西(查詢變量,枚舉,類,函數,它們的參數等)被稱爲自檢或元編程,因爲你編寫的代碼在你的代碼上運行(「元代碼「)。
C++不提供默認的元編程功能(只有我知道的例外:typeid
,但沒有用於變量名稱/定義)。默認情況下,你可以破解這個限制,並在構建過程中包含一些額外的步驟,這些步驟解析頭文件以獲取這些定義,並以不同的方式在運行時訪問它們。但地圖是更好的方式,相信我。
'if(first == xxx){size = yyy; } else {size = zzz; }' – Arun 2013-04-10 19:36:53
@ArunSaha他說有100個這樣的變量,我認爲他正在尋找比硬編碼100 else if語句更通用的解決方案。 – Barmar 2013-04-10 19:38:01
@Barmar - 是的,這是正確的!我不想要其他語句 – dharag 2013-04-10 19:43:45