जबकि सी ++ 11 नई सुविधाओं के साथ प्रयोग, मुझे पता चला कि std :: प्लेसहोल्डर :: _ 1 नहीं सीधे lambdas रूप में इस्तेमाल किया जा सकता है: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);
यदि मैं बूस्ट के संस्करण का उपयोग करने के लिए इसे बदलता हूं तो यह ठीक से संकलित करता है।
यह मानक संस्करण के साथ क्यों काम नहीं करता है? क्या इसे काम करने का कोई तरीका है या क्या मुझे यहां एक बदसूरत लैम्ब्डा का उपयोग करना चाहिए?
transform(a, a+5, a, [](int i){return i*2;});
मैं देखता हूं। बूस्ट के बराबर लागू करने के लिए कठिन/बुरा होगा: नई लैम्ब्डा प्रणाली के साथ लैम्ब्डा/फीनिक्स? – ogoid
@ogoid: उम, * क्या * नया लैम्ब्डा सिस्टम? इसके अलावा, आप एक पूरी तरह से अलग सवाल पूछ रहे हैं। –
@ogoid: मेरे लिए बूस्ट का पुन: आविष्कार करना मुश्किल होगा। लैम्ब्डा, हालांकि मुझे आपके बारे में पता नहीं है। – Mehrdad