7
當用C++ 11個試驗新的功能,我發現,在std ::佔位符:: _ 1不能被直接用作lambda表達式:使用C++ 11佔位符作爲lambdas?
#include <algorithm>
#include <functional>
// #include <boost/lambda/lambda.hpp>
using namespace std;
// using boost::lambda::_1;
using std::placeholders::_1;
int main()
{
int a[] = {1,2,3,4,5};
transform(a, a+5, a, _1 * 2);
}
鏘3.3錯誤:
tmp $ clang -std=c++11 -stdlib=libc++ -lc++ test.cpp
test.cpp:16:27: error: invalid operands to binary expression ('__ph<1>' and 'int')
transform(a, a+5, a, _1 * 2);
如果我改變它使用Boost的版本,它編譯好。
爲什麼這不符合標準版本?有沒有辦法讓它工作,或者我必須在這裏使用一個醜陋的lambda?
transform(a, a+5, a, [](int i){return i*2;});
我明白了。用新的lambda系統實現相當於Boost:lambda/phoenix會很難/不好嗎? – ogoid
@ogoid:嗯,*新的lambda系統是什麼?另外,你正在問一個完全不同的問題。 –
@ogoid:對我來說,重新發明Boost.Lambda是相當困難的,儘管我不瞭解你。 – Mehrdad