C ++, как создать агрегат, который хранит лямбда-выражения и может быть передан в функцию в качестве назначенных инициализаторов - PullRequest
0 голосов
/ 30 апреля 2020

Я пытаюсь передать агрегат, который хранит функции как назначенные инициализаторы, но безуспешно.

Вот что я попробовал:

    typedef struct Handlers
    {
        std::function<void()> func1 = nullptr;
        std::function<void()> func2 = nullptr;
        std::function<void()> func3 = nullptr;
        std::function<void()> func4 = nullptr; 
    } Handlers;

    class Person
    {
    public:
        Person(const char *name, 
               uint16_t age, 
               Handlers &&handlers);

        void doSomething();
    };

Вот как я пытаюсь передать функции

int main(int argc, char *argv[])
{
   Person p1(
        "Guy",
        28,
        { 
          .func1 = []() {},
          .func2 = []() {},
          .func3 = []() {},
          .func4 = []() {}
        });
}

Одно из сообщений об ошибке:

no known conversion for argument 3 from ‘<brace-enclosed initializer list>’ to ‘Handlers&&’
   35 |     Person(const char *name, uint16_t age, Handlers &&handlers);
...