2016-05-22 61 views
3
int main() { 
    int x = 1, y = 2, z = 3, w = 4; 
#define formula x + y * z % w 
    x++; 
    do_something1(formula); 
    y++; 
    do_something2(formula); 
    z++; 
    do_something3(formula); 
    w++; 
    do_something4(formula); 
#undef formula 
    return 0; 
} 

我目前使用#define來防止重複長右值。有沒有更好的替代方法來做到這一點?如何防止重複長右值

+2

你知道的功能是什麼?如果是這樣,爲什麼不寫一個函數來進行公式所需的計算? – Peter

+0

'int formula(int x,int y,int z,int w){return x + y * z%w; }' –

回答

6

使用lambda表達:

int main() { 
    int x = 1, y = 2, z = 3, w = 4; 
    auto formula = [&] { return x + y * z % w; }; 
    x++; 
    do_something1(formula()); 
    y++; 
    do_something2(formula()); 
    z++; 
    do_something3(formula()); 
    w++; 
    do_something4(formula()); 
    return 0; 
}