2015-07-20 62 views
2

目前我有這個代碼樹幹:結構向量v[myStruct]。它的大小是3.我將這些結構命名爲myStruct_A,myStruct_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需要做以上的事情。這裏的問題是,如果使用函數,我不知道如何分離和指定名稱。我需要獲得幾個基於所有這三個輸出的數據向量。

+0

後綴是什麼?如果你傳遞struct作爲參數,你不會在意它是如何在函數中命名的。 – LeleDumbo

+0

它們具有相同的數據類型。只是不同的名字。我現在能想到的是每個結構使用一個「pair」,其名稱爲第二個條目。但它似乎很蠢...... –

+0

@LeleDumbo你是對的......只要我按順序添加它們,我不在乎這個名字。當我從矢量中提取最終結果時,我只能將它們命名。 –

回答

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

這種特殊的演示代碼是非常沒有意義的(它產生在所有三組和所有的三個矢量相同的結果),但如何做你所需要的操作。