调用多个类实例

时间:2015-09-23 19:01:22

标签: c++

我有一个班级

InstanceID instanceID = InstanceID.getInstance(this);
String token = instanceID.getToken(getString(R.string.gcm_defaultSenderId),
        GoogleCloudMessaging.INSTANCE_ID_SCOPE, null);

现在我有多个Command类的实例用于不同的'Command'类型。为简单起见,我在命令类型上创建实例名称。

class Command
{
 public:
  Command (uint32_t _count, uint32_t _pre)
    {
      count = _count;
      pre = _pre;
    }

  int parse (string command)
  {
         // Some action on the base of given string and pre initialized member
         // varaiable
  }

 protected:
  uint32_t pre;
  uint32_t pre;
};

现在,如何在单行中调用给定'type'的'parse'函数。

我可以使用if else-if结构来处理它,如

Command type1 (2,3);
Command type2 (6,5);
Command type3 (7,3);

但我可以通用的方式处理这个问题吗?像

if (type == type1)
 type1->parse (cmd);
else if (type == type2)
  type->parse (cmd);
..
..

1 个答案:

答案 0 :(得分:1)

你可以使用std :: vector(带指针):

std::vector<Command *> types;
types.push_back(new Command(2,3));
types.push_back(new Command(6,5));
types.push_back(new Command(7,3));
//...
unsigned int i = 2;
types[i]->parse(cmd);

在某些时候,您需要删除指向的对象:

delete types[i];

编辑1:
您也可以使用不带指针的std::vector,无需删除:

    std::vector<Command> types;
    types.push_back(Command(2,3));
    types.push_back(Command(6,5));
    types.push_back(Command(7,3));
//...
    types[i].parse(cmd);

通过披露目的细节,我们也可以提供其他选择。

注意:根据评论,添加std::vector的使用而不使用指针