我正在学习提升lambda(不是c ++ 0X lambda因为我猜它们不同)。但是,如果唯一的输入参数是调用对象,我无法在线调用成员函数(然后输出结果)。我的意思是这条线有效:
for_each(vecCt.begin(), vecCt.end(), cout<<_1<<endl);
如果vecCt是vector
的{{1}}。但是,如果vecCt是int
vector
,它有一个名为MyClass
的函数来返回一个字符串怎么办?这不是:
getName
也不是:
for_each(vecCt.begin(), vecCt.end(), cout<<_1->getName());
作品。
我在线搜索但很多结果建议在调用成员函数时使用bind。现在我知道了这个
for_each(vecCt.begin(), vecCt.end(), cout<<*_1.getName());
让我能够在传递int的每个对象上调用for_each(vecCt.begin(), vecCt.end(), bind(&MyClass::getName, _1);
,但是如何将此输出传递给cout?这不起作用:
getName
答案 0 :(得分:1)
您可能会在boost::
,全局,boos::lambda
(可能更多,如boost::phoenix
)中混合占位符和函数。
此处已修复演示: Live On Coliru
#include <boost/lambda/lambda.hpp>
#include <boost/lambda/bind.hpp>
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
struct X
{
int x;
std::string accessor() const { return "X[" + std::to_string(x) + "]"; } // I know, requires c++11
};
int main()
{
std::vector<X> v;
v.push_back({ 1 });
v.push_back({2});
v.push_back({3});
v.push_back({4});
v.push_back({5});
std::for_each(v.begin(), v.end(),
std::cout << boost::lambda::bind(&X::accessor, boost::lambda::_1) << "\n");
}