2015-11-28 140 views
-1

定義絕對不是一個好的解決方案。C++如何使用「循環(n)」來表示「for(int i = 0; i <n; i ++)」?

#define loop(n) for(int i=0;i<n;i++) 
int main() 
{ 
    int i = 0; 
    loop(10000) { i++; }; 
    cout << i << endl;//i==0 here,because of naming duplication. 
    getchar(); 
    return 0; 
} 

除了僅僅使用一個非常複雜的名稱來取代我之外,是否有任何解決方案?

+4

爲什麼你想要這樣的宏? –

+0

@πάνταῥεῖ只是好奇C++語法。 – iouvxz

+0

那麼,你可以編寫一個函數並傳遞'n'和'i'作爲參數,後者作爲參考。 –

回答

5

如果我理解正確的(邪惡)的方式與宏做到這一點是:

#define loop(n) for (int i=0; i < n; ++i) 

int main() 
{ 
    loop(10000) 
    { 
     std::cout << i << std::endl; 
    } 
    return 0; 
} 

一個不太壞的解決辦法是用lambda函數:

template<typename T> 
void loop(int n, T func) 
{ 
    for (int i=0; i < n; ++i) 
     func(i); 
} 

int main() 
{ 
    loop(10000, [] (int i) 
     { 
      std::cout << i << std::endl; 
     }); 
    return 0; 
} 

不過不要」用真實代碼做這件事,只要寫下簡單的for聲明,每個人都會理解你。

相關問題