2013-04-22 60 views
0

前一陣子我偶然發現了一個 下面的代碼行:是否可以在不使用boost的情況下在C++ 11中編寫這樣的代碼?

return accumulate(s, s + size, char(), (_1^_2)); 

而且,利用升壓頭,但我一直認爲這是非常非常非常優雅(注意,拉姆達沒有輸入PARAMS命名,因此它是超短的。:) 請注意,我知道C++ 11有lambda函數,這不關於lambdas,它是關於這個很好的簡短語法。

+0

我不確定你的問題,'^'可以被重載,所以它是可能的。 – 2013-04-22 03:03:48

+0

'^'是什麼意思?它在C和C++中意味着什麼,或者它在其他語言中的含義如何? – 2013-04-22 03:04:07

+0

code does xor checksum :),所以^是正常的^ ...^_^ – NoSenseEtAl 2013-04-22 03:10:00

回答

3

沒有Boost的唯一方法是重新創建創建它的Boost組件。如果沒有Boost組件的實現,你怎麼可能擁有Boost組件的語法呢?

語言解決方案是lambdas,如果你不喜歡它們,那麼是時候使用Boost或者竊取它的特定部分。

+0

我認爲ISO委員會很聰明,可以實現一個很酷的功能......不是我第一次犯這個錯誤:P儘管tbh我猜想它不能完成,但我想確定自從我說我真的很喜歡語法。 – NoSenseEtAl 2013-04-24 08:49:21

+0

@NoSenseEtAl:如果沒有人提出建議,委員會不能因爲不在該語言中而對其做出嘲弄。 – Xeo 2013-04-24 08:59:16

+0

*「我認爲ISO委員會很聰明,可以實現一個很酷的功能」* - 當然他們是。而且你知道什麼,他們甚至足夠聰明,不會實現人們可能會發現的每個功能*「酷」*。 * Boost *是豐富的功能豐富的庫,而不是下一個標準的事實模型。我們終於有了lambda。好吧,它們並不像你那樣整齊,但它們很好地融入了現有的語言,並且不會將語言混淆成完全不同的語言。他們使圖書館解決方案像* Boost.Lambda *過時,如果你仍然想要它,就使用它。 – 2013-04-24 09:04:33

6

隨着硬編碼類型...

return accumulate(s, s+size, char(), [](char l, char r){ return l^r; }); 

generic lambdas被允許(C++ 14)...

return accumulate(s, s+size, char(), [](auto l, auto r){ return l^r; }); 

現在,std::bit_xor ...

return accumulate(s, s+size, char(), bit_xor<char>()); 
+0

我知道這是可能的,即時尋找語法,沒有定義輸入參數的lambda ... – NoSenseEtAl 2013-04-22 03:13:23

+3

http://en.cppreference.com/w/cpp/utility/functional/bit_xor – 2013-04-22 03:23:05

+0

@BenjaminLindley哦,哈哈。不知道存在......謝謝。 – David 2013-04-22 03:23:36

相關問題