C ++ lambda作为函数的模板化参数不起作用

时间:2018-12-05 18:05:49

标签: c++ c++11 lambda

我正在尝试将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而不是模板,但是在我正在使用的嵌入式设备上不可用。

1 个答案:

答案 0 :(得分:1)

maybe采用左值引用:

maybe(R& result, F& lambda)

C ++禁止将非常量左值引用绑定到临时对象。添加一个常量。

maybe(R& result, F const& lambda)