Как получить лямбду в качестве параметра функции-члена класса шаблона - PullRequest
0 голосов
/ 21 февраля 2020

У меня есть класс C ++, который является шаблоном. у него есть функция-член, которая должна принимать любую лямду в качестве параметра;

В основном это то, что я хочу сделать: Я прохожу где я пытаюсь сделать что-то вроде этого: -

future->onFinished([someobject](){
   ...
});

Я получаю следующую ошибку: -

connectionworker.cpp:106:24: error: no viable conversion from '(lambda at /home/noone/Development/Exatation/Exever/src/connectionworker.cpp:106:24)' to 'void (*)()'
efuture.h:17:28: note: passing argument to parameter 'f' here

1 Ответ

2 голосов
/ 21 февраля 2020

Только лямбда-выражения не для захвата и не универсальные c могут быть преобразованы в указатель на функцию. Само по себе любое лямбда-выражение - как с захватом, так и с захватом - имеет свой собственный тип, известный только компилятору. В таком случае есть две альтернативы:

  • Используйте шаблон функции, который может определить тип лямбда-выражения:

    template <typename F>
    void onFinished(F f);
    
  • Используйте метод стирания типа, например, std::function<void()>:

    #include <functional>
    
    void onFinished(std::function<void()> f);
    
...