Короткий ответ: на С++ этого сделать нельзя. Основное различие между c++ и javascript заключается в том, что c++ является компилируемым языком, а javascript — нет. Javascript имеет множество удобных функций времени выполнения, которые вы можете использовать, т. е. вы можете использовать нотацию скобок для доступа к свойствам.
obj["property"]
Это позволяет помещать в скобки любую строку, а затем оценивать ее во время выполнения. С++, однако, не имеет такой большой среды выполнения (существует очень мощная среда выполнения, но мощная по-другому).
Теперь, после всего сказанного, если вы хотите реализовать функцию, подобную вашей 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
показывает, как вы можете реализовать оператор []
самостоятельно.
person
DanZimm
schedule
30.05.2014
obj[method | property]
. В других языках по моему опыту чаще всего используется точечная нотацияobj.method
. В котором также можно использовать JavaScript. - person Spencer Wieczorek   schedule 30.05.2014arr[0]
или оobj["toString"]()
. Оба обозначения в скобках - person Kevin B   schedule 30.05.2014arr[0]
практически стандартно используется во многих языках, не только в JavaScript. - person Spencer Wieczorek   schedule 30.05.2014