循环使用具有相似名称的对象

时间:2014-12-12 15:59:10

标签: c++ string pointers object for-loop

我在c ++中有一组名为object1, object2, object3, ...的公共对象。 这些对象是由一个类构成的,它提供了一些函数,比如Add()" merges"两个或多个对象。

我想要做的是遍历对象并将它们合并在一起。如果我使用

for (int i = 1 ; i <= 30 ; i++){

    TString::Format("object%d",i)->Add();

}

显然它无法工作,因为我试图使用错误的指针来访问一个对象来调用它。

首先,我想知道是否有办法循环对象,其次,如果有这个过程的特定名称。

编辑我想过使用arrayvector并从那里访问它,但为了填充数组,我必须提供很多{{1}如果你有push_back个对象就不方便。

2 个答案:

答案 0 :(得分:2)

这是不可能的,因为变量名是C ++中的编译时工件。除了“侧面”获取附加信息的调试器之外,程序无法通过其名称访问变量。

如果需要将对象与名称或索引相关联,请将所需对象放在容器中。如果您需要按名称访问,请使用map<string,YourObjectType>unordered_map<string,YourObjectType>。如果您需要按索引访问,请使用vector<YourObjectType>

vector<YourObjectType*> objectPtrs;
objectPtrs.push_back(&object0);
objectPtrs.push_back(&object1);
objectPtrs.push_back(&object2);
...
objectPtrs.push_back(&object29);
for (int i = 1 ; i <= 30 ; i++){
    TString::Format(*objectPtrs[i])->Add();
}

上面的示例创建了一个指针容器,以便循环访问原始对象,而不是存储在向量中的副本。您可以通过将原始对象变量存储在向量中,并通过索引而不是按名称访问它们来消除原始对象变量。

答案 1 :(得分:0)

如果您可以访问首先创建对象的代码:

在创建/构建期间构建键值对,并将它们输入到地图中。

密钥将是“Object1”,“Object2”等。值将是指向刚刚分配/创建的对象的指针。

将这些对推入地图。

当需要迭代一组对象时,重新创建该名称(“ObjectN”)并在地图中查找,以获取指向该对象的指针。

[
  ["Object2", ptr-to-Object2]
  ["Object7", ptr-to-Object7]
  ...
]

这不会假设有关索引等的任何内容。您构建了一个名称到对象的关联,并在迭代时查找它。