使用std :: bind移动lambdas

时间:2014-11-19 18:38:11

标签: c++ c++11 visual-studio-2013 lambda

在visual studio 2013中编译此代码时出现编译错误(error C2064: term does not evaluate to function taking 0 arguments

#include <string>
#include <iostream>
#include <functional>

template<class F>
void foo(F& callback)
{
    callback();
}

template<class F>
void bar(F& callback)
{
    auto barCallback = std::bind([](F& callback)
    {
        callback();
        std::cout << "world" << std::endl;
    }, std::move(callback));

    foo(barCallback);
}

int main()
{
    std::string s("hello ");
    auto f = std::bind([](std::string& s) { std::cout << s; }, std::move(s));
    bar(f);
}

基本上,我想在这里实现的是std::stringmain移动到bar然后转移到foo(没有制作副本)

0 个答案:

没有答案