根据C ++中的变量名返回特定变量?

时间:2017-02-16 05:23:59

标签: c++

在函数输入中给出一个参数,是否可以返回具有该特定名称的变量?

例如,如果您有以下代码:

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

    return parameter;
}

你跑returnsParameter("a"),是否有某种方法可以返回“测试”?我尝试使用指针和引用变量,但是你不能进行非常量引用。

有没有办法在不使用地图的情况下执行此操作?

4 个答案:

答案 0 :(得分:5)

您可以将try { JSONObject ai=new JSONObject(response); JSONObject cat_img=ai.getJSONObject("category_image"); int id=cat_img.getInt("id"); //you can get id here JSONObject cat_url=cat_img.getJSONObject("cover_url"); String url=cat_url.getString("url"); //you can get url from here ArrayList<Business> premiumsList=new ArrayList<>(); premiumsList.add(new Business(cat_img.getString("name"),url)); //add it to aaray } catch (JSONException e) { e.printStackTrace(); } 用于此目的。 创建std::map 并在其中添加map<string, string> strings对并返回("a", "test")。 据我所知,无法访问变量名称。 (这是我的信念,我不完全确定)

答案 1 :(得分: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 "???";
}

答案 2 :(得分: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")

答案 3 :(得分: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";
}