给出以下代码:
#include <functional>
#include <iostream>
struct worker
{
std::function<bool(std::string)> m_callback;
void do_work(std::function<bool(std::string)> callback)
{
m_callback = std::bind(callback, std::placeholders::_1); // <--- replace this with lambda
std::cout << "worker is working..." << std::endl;
callback("worker is complete");
}
};
// pretty boring class - a cut down of my actual class
struct helper
{
bool work_callback(std::string str)
{
std::cout << "Helper: msg from worker: " << str << std::endl;
return false;
}
};
int main()
{
helper the_helper;
worker the_worker;
std::cout << "Main: start\n";
the_worker.do_work([&](std::string data){ return the_helper.work_callback(data); });
std::cout << "Main: end\n\n";
}
我想用lambda替换m_callback = std::bind...
。到目前为止我有:
m_callback = [&](std::string data){ callback(data); };
这给了我错误:
main.cpp: In member function ‘void worker::do_work(std::function<bool(std::basic_string<char>)>)’:
main.cpp:19:18: error: no match for ‘operator=’ (operand types are ‘std::function)>’ and ‘worker::do_work(std::function)>)::’)
m_callback = [&](std::string data){ callback(data); };
我不太清楚如何向前迈进。你可以在这里看到我的全部尝试:https://onlinegdb.com/SkaADi7u7
void do_work(std::function<bool(std::string)> callback)
{
m_callback = [&](std::string data){ callback(data); };
std::cout << "worker is working..." << std::endl;
callback("worker is complete");
}
你的lambda调用传递给它的callback
函数,但不返回它的结果,这意味着它返回void
,你不能将它分配给std::function<bool(std::string)>
。
在lambda中添加一个回报。
m_callback = [&](std::string data){ return callback(data); };