boost :: function & boost :: lambda - вызвать сайт и вызвать _1 и _2 как тип - PullRequest
0 голосов
/ 05 июня 2010

Извините за запутанный заголовок. Позвольте мне объяснить через код:

#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 s может отсутствовать. Эти учебники и документы не помогли сегодня утром.

Как мне сделать то, что я пытаюсь сделать?

Ответы [ 2 ]

2 голосов
/ 05 июня 2010

Вам нужно:

boost::function<std::string(std::string, std::string)> f =
    boost::bind(&std::string::append, _1, _2);
1 голос
/ 05 июня 2010

Я не собираюсь делать вид, что я понимаю 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...