1

我正在学习 boost lambda(不是 c++0X lambda,因为我猜它们是不同的)。但是如果唯一的输入参数是调用对象,我无法在线找到调用成员函数(然后输出结果)的方法。我的意思是这条线有效:

for_each(vecCt.begin(), vecCt.end(), cout<<_1<<endl);

如果vecCt是vector. int但是如果 vecCt 是一个vectorof MyClass,它有一个调用函数getName来返回一个字符串呢?这都不是:

for_each(vecCt.begin(), vecCt.end(), cout<<_1->getName());

也不是这个:

for_each(vecCt.begin(), vecCt.end(), cout<<*_1.getName());

作品。

我在网上搜索,但很多结果建议在调用成员函数时使用绑定。现在我知道了

for_each(vecCt.begin(), vecCt.end(), bind(&MyClass::getName, _1);

使我能够调用getName传递给 int 的每个对象,但是如何将此输出传递给 cout?这不起作用:

for_each(vecCt.begin(), vecCt.end(), cout<<bind(&MyClass::.getName, _1);
4

1 回答 1

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");
}
于 2014-10-23T13:15:23.473 回答