【发布时间】:2023-10-19 10:50:01
【问题描述】:
我正在尝试将 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&&。