2012-10-01 56 views
1

可能重複:
Using Boost adaptors with C++11 lambdas我可以在boost中使用std :: function(C++ 11 lambda)嗎?

我想用升壓範圍適配器映射(變換)的地圖的列表,通過C++ 11 lambda函數。 像這樣:

boost::copy(myMap | transformed([](pair<string, string> p){return p.first;}), 
       ostream_iterator<string>(cout, ", ")); 

這是行不通的,因爲的std ::函數沒有一個value_type的類型。我知道這個特殊的轉換可以通過map_keys完成,但我的觀點更一般。我如何使用Boost的C++ 11 lambda表達式?

如果不能在沒有樣板的情況下完成,有沒有計劃解決這個問題?我試圖尋找它,但發現很少。

+0

注意:C++ 11 lambdas和'std :: function'是兩種不同的東西。*你的代碼根本不使用'std :: function'。 –

+0

我認爲C++ 11 lambda與std :: function兼容,因此,在某些意義上std :: functions。 – Gurgeh

回答

1

我自己找到了!與升壓1.51.0開始,你加

#define BOOST_RESULT_OF_USE_DECLTYPE 

包括升壓文件之前,它會神奇地使用decltype而不是:: value_type的推斷返回類型。現在我的例子工作!

+2

現在仔細踩。這個宏比Boost 1.51老很多,並且由於一些問題而導致舊版Boost版本出現問題。 – pmr

+0

我需要1.51在我的CMake文件。這夠了嗎,還是前面還有麻煩?你有參考嗎? – Gurgeh

+1

boost.devel上有這個巨大的線程http://thread.gmane.org/gmane.comp.lib.boost.devel/233752/focus=234254它歸結爲decltype spec中的一個bug,它在標準化,許多不符合最新規範的編譯器,以及在假設「decltype/result_of」的某些特定行爲的許多問題中。您應該可以使用Boost 1.51和完全兼容的編譯器。 – pmr

相關問題