Trong khi thử nghiệm với C++ 11 tính năng mới, tôi phát hiện ra rằng std :: placeholders :: _ 1 có thể không được sử dụng trực tiếp như lambdas:sử dụng C++ 11 trình giữ chỗ như 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 lỗi:
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);
Nếu tôi thay đổi nó để sử dụng phiên bản của Boost nó biên dịch tốt.
Tại sao tính năng này không hoạt động với phiên bản chuẩn? Có cách nào để làm cho nó hoạt động hoặc tôi phải sử dụng một lambda xấu xí ở đây?
transform(a, a+5, a, [](int i){return i*2;});
Tôi hiểu. Sẽ là khó khăn/xấu để thực hiện tương đương với Boost: lambda/phoenix với hệ thống lambda mới? – ogoid
@ogoid: Um, * cái gì * hệ thống lambda mới? Ngoài ra, bạn đang hỏi về một câu hỏi hoàn toàn khác. –
@ogoid: Sẽ khá khó khăn cho tôi để phát minh lại Boost.Lambda, tôi không biết gì về bạn. – Mehrdad