簡體   English   中英

從名稱在字符串上的整數獲取值

[英]Get value from integer whose name is on a string

int a = 1;
int b = 2;
int c = 3;
std::string TakeFrom = "a";

如何從TakeFrom(在這種情況下為a)獲取值,並讀取像這樣命名的整數? 例如,在上面的代碼中,我將必須讀取a的值,因為TakeFrom包含'a',因此我將獲得“ 1”,但是如果TakeFrom包含“ b”,則將獲得b的值(2)。

在正常的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;
}

有了單獨的變量,沒有簡單的方法(一系列if語句或等效語句除外)。

如果將三個變量轉換為單個std::map<std::string,int> ,事情會容易得多。

如果abc必須保留本地int ,那么唯一的方法就是無聊,例如:

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表示a1表示b2表示c ),則可以將abc放入數組中,並且使用整數TakeFrom作為索引。
  • 如果您只允許使用單字符變量,則可以用單個switch替換條件條件序列。
  • 如果您願意使用標准集合,請使用字符串到整數的映射替換各個變量。

暫無
暫無

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

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