缩小复制/粘贴代码的更好方法

时间:2015-07-20 23:56:22

标签: c++ enums

目前我有这个代码主干:结构v[myStruct]的向量。它的大小为3.我将这些结构命名为myStruct_AmyStruct_BmyStruct_C。每段代码几乎相同,但其名称为后缀。

SomeMap someMap_A;
for (auto& pair : myStruct_A.hashMap) {
  SomeStruct someStruct = foo(pair);
  someMap_A[someStruct.key] = someStruct.value;
  anotherStruct_A[someStruct.nameX] = someStruct.bundle;
}
someVector.push_back[someMap_A];

所有三个A,B,C都需要做上述事情。这里的问题是,如果使用函数,我不知道如何分离和指定名称。我需要获得几个基于所有这三个myStruct s'的数据向量。输出。

1 个答案:

答案 0 :(得分:0)

您可以使用宏执行此操作。例如,这是一个简化版本:

#define process(i, suffix)  some_vect_ ## suffix.push_back(i);  \
                            some_set_ ## suffix.insert(i);


int main() { 
    std::vector<int> some_vect_A, some_vect_B, some_vect_C;
    std::set<int> some_set_A, some_set_B, some_set_C;

    for (int i = 0; i < 100; i++) {
        int val = rand();
        process(val, A); // adds `val` to `some_vect_A` and `some_set_A`
        process(val, B); // adds `val` to `some_vect_B` and `some_set_B`
        process(val, C); // adds `val` to `some_vect_C` and `some_set_C`
    }
}

这个特殊的演示代码非常无意义(它在所有三个集合和所有三个向量中产生相同的结果),但确实显示了如何进行所需的操作。