int a = 1;
int b = 2;
int c = 3;
std::string TakeFrom = "a";
如何從TakeFrom(在本例中爲a)讀取值並讀取像這樣的整數?例如,在上面的代碼中,我必須讀取a的值,因爲'a'是TakeFrom包含的值,所以我會得到「1」,但如果TakeFrom包含「b」,我會得到b的值(2)。從名稱在字符串上的整數中獲取值
int a = 1;
int b = 2;
int c = 3;
std::string TakeFrom = "a";
如何從TakeFrom(在本例中爲a)讀取值並讀取像這樣的整數?例如,在上面的代碼中,我必須讀取a的值,因爲'a'是TakeFrom包含的值,所以我會得到「1」,但如果TakeFrom包含「b」,我會得到b的值(2)。從名稱在字符串上的整數中獲取值
如果a
, b
和c
必須留在當地int
個S,你這樣做是乏味的,也就是這樣的唯一途徑:
int val;
if (TakeFrom == "a") {
val = a;
} else if (TakeFrom == "b") {
val = b;
} else if (TakeFrom == "c") {
val = c;
} else {
// It's an error
}
如果你是開放的一些變化,有幾件事情,你可以這樣做:
TakeFrom
,使其成爲一個整數,而不是一個字符串(比如,0
意味着a
,1
意味着b
,並2
意味着c
),你可以放置a
,b
,並c
到一個數組,並使用INT eger TakeFrom
作爲索引。switch
替換條件序列。你好,對於遲到回覆感到抱歉。感謝你的回答。這是最完整的,這是我必須做的。 – yop
由於存在單獨的變量,因此沒有簡單的方法(除了一系列if
語句或同等語句)。
如果你把這三個變量變成一個單一的std::map<std::string,int>
,情況會容易得多。
在正常的C/C++條件下,變量名只存在於編譯期間的給定範圍內,它們本質上是用於引用特定內存位置/寄存器的人類可讀的助記符。 C/C++沒有最小的反射能力,因此在運行時沒有內置的方法可以通過名稱引用變量,也可以通過它的位置/值查找變量的名稱。
爲了解決你所描述的問題,有幾個簡單的選擇:
int value;
if (TakeFrom == "a") {
value = a;
} else if (TakeFrom == "b") {
value = b;
} ...
或
switch (TakeFrom[0]) {
case 'a':
value = a;
break;
case 'b':
value = b;
break;
}
或者你可以使用一個查找表
int a = 1, b = 2, c = 3;
struct Lookup {
int& m_variable;
const char* m_name;
};
static const size_t NumLookups = 3;
Lookup lookups[NumLookups] = { { a, "a" }, { b, "b" }, { c, "c" } };
for (size_t i = 0; i < NumLookups; ++i) {
if (TakeFrom == lookups[i].m_name)
value = lookups[i].m_variable;
}
你不能確切的,但你可以使用一個'std :: map'來映射字符串(變量名)爲int。 – David