C ++ лямбда как шаблонный параметр функции не работает - PullRequest
0 голосов
/ 05 декабря 2018

Я пытаюсь передать лямбду в параметр в функции 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);

, то все работает просто отлично.Однако, если я помещаю лямбу непосредственно в функцию, например:

maybe(result, [&](){return adi_uart_Open(deviceNum, ADI_UART_DIR_BIDIRECTION, &memory, ADI_UART_BIDIR_DMA_MEMORY_SIZE, &handle);});

, тогда я получаю следующую ошибку:

ошибка: ни один экземпляр шаблона функции «может» не совпадаетсписок аргументов

Я бы использовал std :: function вместо шаблонов, но он недоступен на встроенном устройстве, над которым я работаю.

1 Ответ

0 голосов
/ 05 декабря 2018

maybe принимает ссылку на lvalue:

maybe(R& result, F& lambda)

C ++ запрещает неконстантную ссылку на lvalue связывать с временной.Добавить const.

maybe(R& result, F const& lambda)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...