我注意到类似C++的东西。

SomeClass obj = SomeClass();
int boo = obj["foo"];

这叫什么,我该怎么办?


class Boo {
public:
     int GetValue (string item) {
          switch (item) {
               case "foo" : return 1;
               case "apple" : return 2;
          }
          return 0;
     }
}

Boo boo = Boo();
int foo = boo.GetValue("foo");
// instead of that I want to be able to do
int foo = boo["foo"];

最佳答案

要使用[],您需要重载operator[]:

class Boo {
public:
     int operator[](string const &item) {
          if (item == "foo")
              return 1;
          if (item == "apple")
              return 2;
          return 0;
     }
};

您可能想知道std::map已经提供了您似乎正在寻找的东西:
std::map<std::string, int> boo;

boo["foo"] = 1;
boo["apple"] = 2;

int foo = boo["foo"];

明显的区别是,当/如果使用它查找以前未插入的值,它将使用该键和值0插入新项。

关于c++ - 通过[“”]或[int]用于自定义类的C++访问组件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9304383/

10-12 20:37