我有一个班级
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);
..
..
答案 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
的使用而不使用指针。