C ++ lambda作为函数的模板参数不起作用
Posted
技术标签:
【中文标题】C ++ lambda作为函数的模板参数不起作用【英文标题】:C++ lambda as templated parameter of a function not working 【发布时间】:2018-12-05 18:05:49 【问题描述】:我正在尝试将 lambda 传递给 maybe() 函数中的参数,但它的工作很奇怪。代码如下:
template<typename R, typename F>
void maybe(R& result, F& lambda)
if (0 == result)
result = lambda();
auto l = [&]()
return adi_uart_Open(deviceNum, ADI_UART_DIR_BIDIRECTION, &memory, ADI_UART_BIDIR_DMA_MEMORY_SIZE, &handle);
;
如果我打电话
maybe(result, l);
然后一切正常。但是,如果我将lamba直接放入函数中,例如:
maybe(result, [&]()return adi_uart_Open(deviceNum, ADI_UART_DIR_BIDIRECTION, &memory, ADI_UART_BIDIR_DMA_MEMORY_SIZE, &handle););
然后我收到以下错误:
错误:没有函数模板的实例“可能”与参数列表匹配
我会使用 std::function 而不是模板,但它在我正在使用的嵌入式设备上不可用。
【问题讨论】:
F&
是非const
左值引用,它不能绑定到您的临时 lambda。使用F const &
或F&&
。
复制:***.com/q/1565600/5470596 ?
【参考方案1】:
maybe
采用左值引用:
maybe(R& result, F& lambda)
C++ 禁止将非常量左值引用绑定到临时值。添加一个常量。
maybe(R& result, F const& lambda)
【讨论】:
以上是关于C ++ lambda作为函数的模板参数不起作用的主要内容,如果未能解决你的问题,请参考以下文章