簡體   English   中英

使用c ++ 11占位符作為lambdas?

[英]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.

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