簡體   English   中英

元程序c ++代碼

[英]metaprogram c++ code

我大學的新學期開始了,我再一次“被迫”退出抽象,探索c++中低級編程的深層次。 我的思緒已經部分地受到折疊,高階函數等的影響,我在寫作中沒有任何樂趣,例如:

bool allEven = true;
for(int i = 0; i < arr.length; i++){
   if (arr[i] % 2 != 0){
      allEven = false; 
      break;
   }
}
當我知道我可以寫val allEven = arr forall (_ % 2 == 0)
我的問題是:有沒有任何工具|技術|語言構造|元編程的東西,可以帶來一些c ++代碼而不用實際編寫它? 我需要整個源代碼,但它最終可能會被混淆,只有機器才能處理它。
請不要指責我懶惰,我認為這是我最好的美德之一。 :-)
編輯目前還不完全清楚你要求的是什么...最好的,我想使用像GWT這樣的東西,而是將Java源碼編譯成JavaScript源碼它會將ScalaHaskellF#編譯成C++源代碼,但是因為我沒有相信這樣的事情存在,我想有一些東西......樂於助人。 例如,我很欣賞建議的anon函數。

現在還不完全清楚你真正要求的是什么,但是如果你正在嘗試編寫更像你的其他代碼的C ++,你可以這樣做:

bool allEven = 
    std::accumulate(arr.begin(), arr.end(), [](bool a, int i) {return a && i & 1==0; }, 1);

這確實使用了lambda,它是C ++ 0x中的新增功能。 如果您使用的是不支持lambda的舊編譯器,則可以考慮使用Boost Lambda(在這種情況下,您的代碼將更接近您給出的示例)。

bool is_even = std::find_if(arr.begin(), arr.end(), [](int i) { return i%2 != 0; }) == arr.end();

使用C ++ 0x中的新算法,有all_of

bool all_even = std::all_of(arr.begin(), arr.end(),
                            [](int i) { return i%2 == 0; });

Boost.Range允許更少的冗長:

bool all_even = 
    0==boost::count_if(arr, [](int i){ return i%2 != 0;});

希望Boost.Range很快能提供all_of

看一下Boost.Phoenix庫,它使您能夠在C ++中編寫close(er)函數式編程。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM