2017-02-16 76 views
1

給定函數的輸入中的參數是否有可能返回具有該特定名稱的變量?根據C++中變量的名稱返回特定變量?

舉例來說,如果你有下面的代碼:

string returnsParameter(string parameter) 
{ 
    string a = "test"; 
    string b = "test 2"; 
    string c = "test 3"; 

    return parameter; 
} 

你跑returnsParameter("a"),是否有某種方式來回報「測試」?我試過使用指針和引用變量,但不能創建非常量引用。

有沒有辦法做到這一點,而不使用地圖?

+0

'if(parameter ==「a」)return a;'重複三次? C++編譯器通常不會在運行時存儲有關變量名稱的信息,因此如果您想避免自己輸入「if」,則必須採取一些元編程(大概是使用宏)。 – yeputons

+0

編號時,變量名稱'消失'。你可以用地圖做類似的事情。 – Biffen

+0

我可以使用if語句,但實際中的代碼包含19個要返回的變量;我想知道是否有更簡單的方法來做到這一點? 我想使用地圖,但爲了本練習的目的(這是一個介紹級的C++類),我不允許將任何數據存儲在數組,矢量或特殊對象中。 – ohitsanazn

回答

5

您可以使用std::map來達到此目的。 創建一個map<string, string> strings 並在其中添加一個("a", "test")對並返回strings[parameter]。 據我所知,訪問變量名是不可能的。 (這是我的信念,我不能完全確定)

1

,如果你不能使用std::map那麼恐怕你必須使用設定的條件,注意你並不需要在所有創建變量:

string returnsParameter(string parameter) 
{ 
    if(parameter == "a") return "test"; 
    if(parameter == "b") return "test 2"; 
    if(parameter == "c") return "test 3"; 

    return "???"; 
} 
1

如果您的關鍵域僅存在於字母表a〜z中,並且數據在代碼中是固定的,則您可以創建一個靜態數組,以將其索引爲char

const std::string& lookup(char key) 
{ 
    static const std::string bank[] = { 
     "Apple", 
     "Banana", 
     "Cranberry",   
    }; 
    static const size_t n = sizeof bank/sizeof bank[0]; 

    int i = key - 'a'; 
    return i >= 0 && i < n ? bank[i]: "N/A";  
} 

lookup('a'); // string("Apple") 
lookup('c'); // string("Cranberry") 
0

任何解決方案將需要所使用的地圖,至少在內部,因爲系統將必須用它來決定哪個鍵/值對返回,即使變量名。

你的選擇是使用std :: map,用if語句強化值,或者有自己的查找表。但請記住,只有在找不到密鑰的情況下,您才需要有一個默認返回值。

string returnsParameter(string parameter) 
{ 
    vector<string> values = 
    { 
     "a", "test", 
     "b", "test 2", 
     "c", "test 3" 
    } 

    for(int i = 0; i < values.size(); i += 2) 
    {= 
     if(values[i] == parameter) return values[i + 1]; 
    } 

    return "Not Found"; 
}