[英]using c++11 placeholders as lambdas?
在嘗試使用C ++ 11新功能時,我發現std :: placeholders :: _ 1不能直接用作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);
}
Clang 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;});
Boost實際上有很多_1
占位符。 來自Boost.Bind的那些(或多或少被並入C ++ 11),來自Boost.Lambda的那些,甚至來自Lambda的繼任者Boost.Phoenix的那些。
Lambda和Phoenix版本是唯一可用於創建仿函數的占位符。 Boost.Bind _1
占位符不能,而且這是標准化的。 Lambda和Phoenix是將表達式轉換為函數的方法; 綁定只是一個函數綁定和參數調整系統。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.