在结构 C++ 中动态访问变量

Dynamically Access Variable Inside a Struct C++

我是 C++ 的新手,对如何处理这个问题很困惑。在 Javascript 中,我可以做这样的事情来非常容易地动态访问对象:

function someItem(prop) {
    const item = {
        prop1: 'hey',
        prop2: 'hello'
    };
    return item[prop];
}

在 C++ 中,我假设我必须使用 Struct,但在那之后我陷入了如何动态访问结构成员变量的问题。

void SomeItem(Property Prop)
{
    struct Item
    {
        Proper Prop1;
        Proper Prop2;
    };
    // Item[Prop] ??
 }
       

这可能是糟糕的代码,但我对如何处理它感到很困惑。

如评论中所述,在 C++ 中,您不会为此定义自定义结构,而是使用 std::unordered_map。我不知道 Javascript,但如果 Property 是一个枚举(它可能是经过小修改的其他东西)并且 return item[prop]; 应该是 return 一个字符串,那么这个可能接近:

#include <string>
#include <unordered_map>
#include <iostream>

enum class Property { prop1,prop2};

std::string someItem(Property p){
    const std::unordered_map<Property,std::string> item{
        {Property::prop1,"hey"},
        {Property::prop2,"hello"}
    };
    auto it = item.find(p);
    if (it == item.end()) throw "unknown prop";
    return it->second;
}

int main(){
    std::cout << someItem(Property::prop1);
}

std::unordered_map 确实有一个 operator[],您可以像这样使用 return item[p];,但是当为给定键找到 none 时,它会在映射中插入一个元素.这并不总是可取的,当地图为 const.

时也不可能。

这是一个简单的示例,说明如何创建 struct 的实例,然后访问其成员:

#include <iostream>
#include <string>

struct Item {
    std::string prop1 = "hey";
    std::string prop2 = "hello";
};

int main() {
    Item myItem;
    std::cout << myItem.prop1 << std::endl; // This prints "hey"
    std::cout << myItem.prop2 << std::endl; // This prints "hello"
    return 0;
}

如评论中所述,您可能需要一张地图。映射具有与其关联的键和值,例如,您可以将键 "prop1" 与值 "hey":

关联
#include <iostream>
#include <map>
#include <string>

int main() {
    std::map<std::string, std::string> myMap;
    myMap["prop1"] = "hey";
    myMap["prop2"] = "hello";
    std::cout << myMap["prop1"] << std::endl; // This print "hey"
    std::cout << myMap["prop2"] << std::endl; // This print "hello"
    return 0;
}

第一个被认为是 C++ 中的“正常”struct 用法,另一个更适用于必须按键查找的情况