boost :: function& boost :: lambda - 调用站点调用&访问_1和_2作为类型

时间:2010-06-05 18:38:41

标签: c++ boost

很抱歉这个令人困惑的标题。让我通过代码解释:

#include <string>
#include <boost\function.hpp>
#include <boost\lambda\lambda.hpp>
#include <iostream>

int main()
{
    using namespace boost::lambda;

    boost::function<std::string(std::string, std::string)> f =
        _1.append(_2);

    std::string s = f("Hello", "There");
    std::cout << s;

    return 0;
}

我正在尝试使用function创建一个函数,该函数使用labda表达式创建新的返回值,并在调用站点s = f("Hello", "There");

调用该函数

当我编译它时,我得到:

1>------ Build started: Project: hacks, Configuration: Debug x64 ------
1>Compiling...
1>main.cpp
1>.\main.cpp(11) : error C2039: 'append' : is not a member of 'boost::lambda::lambda_functor<T>'
1>        with
1>        [
1>            T=boost::lambda::placeholder<1>
1>        ]

使用MSVC 9。

我对functionlambda的基本理解可能缺乏。今天早上,教程和文档没有帮助。

我该怎么办?

2 个答案:

答案 0 :(得分:2)

你需要:

boost::function<std::string(std::string, std::string)> f =
    boost::bind(&std::string::append, _1, _2);

答案 1 :(得分:1)

我不会假装我理解boost.lambda,但以下似乎有效:

#include <string>
#include <boost\function.hpp>
#include <boost\lambda\lambda.hpp>
#include <iostream>

int main()
{
    using namespace boost::lambda;

    boost::function<std::string(std::string, std::string)> f = _1 + _2;

    std::string s = f("Hello", "There");
    std::cout << s;

    return 0;
}