gpt4 book ai didi

javascript - 如何在 C++ 中像 JS 中的方括号符号一样动态调用属性名称?

转载 作者:行者123 更新时间:2023-11-28 02:47:29 25 4
gpt4 key购买 nike

我的第一语言是 Javascript,但我开始学习 C++。我最喜欢做的事情之一是在 Javascript 中使用方括号表示法使用巧妙的变量属性名称访问属性,如下所示:

var a = "prop";
var obj = {
this.prop : "before"
};
function alterObj(a){
obj[a] = "after";
}

它似乎没有出现在我的 C++ 书籍中,我在谷歌搜索时遇到了麻烦。那么如何在 C++ 中动态选择属性名称呢?

最佳答案

简短的回答是不能在 C++ 中做到这一点。 c++ 和 javascript 之间的一个主要区别是 c++ 是一种编译语言,而 javascript 不是。 Javascript 有很多你可以使用的简洁的运行时特性,即你可以使用括号表示法来访问属性

obj["property"]

这允许将任何类型的字符串放在括号中,然后在运行时进行计算。然而,C++ 没有那么大的运行时(有一个非常强大的运行时,但以不同的方式强大)。

现在说了这么多,如果你想实现像上面的 alterObj 这样的功能,你可以使用 map 类。您也可以重载 [] 运算符。以下代码段给出了一个示例:

#include <iostream>
#include <map>

class SpecialObject {
public:
std::string operator[](std::string key);
};

std::string SpecialObject::operator[](std::string key) {
std::string retVal = key + " whoa!";
return retVal;
}

void modify(std::map<std::string, std::string> &obj) {
obj["something"] = "someone else";
}

int main(int argc, const char *argv[]) {
std::map<std::string, std::string> obj;
obj["something"] = "someone";
modify(obj);
std::cout << "obj[\"something\"] = " << obj["something"] << std::endl;

SpecialObject obj2;
std::cout << "obj2[\"The clowns say\"] = " << obj2["The clowns say"] << std::endl;
return 0;
}

map 对象允许您为其他对象创建一个简单的容器(在某种意义上与 javascript 对象完全一样),SpecialObject 类展示了如何实现[] 运算符(operator)自己。

关于javascript - 如何在 C++ 中像 JS 中的方括号符号一样动态调用属性名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23962070/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com