提升 lambda 函数调用

Posted

技术标签:

【中文标题】提升 lambda 函数调用【英文标题】:Boost lambda function call 【发布时间】:2014-10-23 11:52:29 【问题描述】:

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

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

如果 vecCt 是 vectorint。但是,如果 vecCt 是 MyClassvector,它有一个名为 getName 的函数来返回一个字符串怎么办?这都不是:

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

也不是这个:

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

有效。

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

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

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

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

【问题讨论】:

找到这个:***.com/questions/9762273/… 定义不起作用。 @doctorlove 我假设你的意思是最后一行?它无法编译,错误是“'std::cout 是的-我认为您只需要调用该函数... bind 是可调用的。添加() @doctorlove 我在cout&lt;&lt; 之后添加了(,在; 之前添加了)。编译错误和我描述的一样。 【参考方案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");

【讨论】:

感谢您的回复。我只是收到错误“绑定不是 boost::lambda 的成员”(是错字吗,应该是 boost::bind 吗?)。我使用 c++ 编译,默认标准是 c++98。我也试过 c++0x 但同样的错误。如果我用 c++0x 尝试 boost::bind,编译错误是不同的:无法将 'std::ostream' 左值绑定到 'std::basic_ostream' (原始错误与 'operator 你复制了整个样本吗?如果是这样,您应该得到boost/boost/lambda.hppboost/lambda/bind.hpp。此外,如果您收到 operator&lt;&lt; 消息,您可能仍在混合/匹配不同的命名空间。尝试使用我的确切代码,编辑它,直到你看到你的代码有什么不同

以上是关于提升 lambda 函数调用的主要内容,如果未能解决你的问题,请参考以下文章

提升 lambda 集合大小评估

从另一个未被调用的 Lambda 函数中调用 Lambda 函数

AWS lambda 调用不调用另一个 lambda 函数 - Node.js

如何从当前 Lambda 函数调用另一个 Lambda 函数?

AWS Lambda 别名简介

AWS lambda 函数调用另一个带参数的 lambda 函数