我正在尝试将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而不是模板,但是在我正在使用的嵌入式设备上不可用。
答案 0 :(得分:1)
maybe
采用左值引用:
maybe(R& result, F& lambda)
C ++禁止将非常量左值引用绑定到临时对象。添加一个常量。
maybe(R& result, F const& lambda)