【发布时间】:2018-04-23 12:47:38
【问题描述】:
假设我有以下代码 sn-ps:
// global variable
std::thread worker_thread;
// Template function
template <typename Functor>
void start_work(Functor &worker_fn) // lambda passed by ref
{
worker_thread = std::thread([&](){
worker_fn();
});
}
这是这样称呼的:
void do_work(int value)
{
printf("Hello from worker\r\n");
}
int main()
{
// This lambda is a temporary variable...
start_work([do_work](int value){ do_work(value) });
}
我开始在 MSVC2012 上进行开发。这一切都很好,似乎工作。然而,当我转移到 Linux 平台上的 gcc 编译器时,我得到了以下(缩写)错误:
no known conversion for argument 1 '...__lambda3' to '...__lambda3&'
我的问题:
- 所以,根据错误,我假设 lambda 是一个临时变量,因此不能通过引用传递 - 对吗?
- 另外 - 知道为什么这适用于 MSVC 吗? - 它会自动修复我写的内容吗?
【问题讨论】:
标签: c++ gcc visual-studio-2012 lambda