很抱歉这个令人困惑的标题。让我通过代码解释:
#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。
我对function
和lambda
的基本理解可能缺乏。今天早上,教程和文档没有帮助。
我该怎么办?
答案 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;
}