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

better way to shrink copy/paste codes

本文关键字:代码 更好 方法 复制      更新时间:2023-10-16

目前我有这个主干代码:一个结构体的向量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的输出的数据向量。

您可以使用宏来完成此操作。例如,下面是一个简化的版本:

#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`
    }
}

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