Инициализировать массив шаблонных структур - PullRequest
1 голос
/ 08 апреля 2020

Следующий фрагмент кода просто создает структуру, состоящую из трех членов. Одним из них является функция обратного вызова. Я хотел бы инициализировать массив этих структур, но я не знаю синтаксиса, где я могу иметь несколько обратных вызовов с различными прототипами.

#include <iostream>
#include <functional>

template <typename Func>
struct Foo
{
    Foo(int a, int b, Func func):
    _a{a},
    _b{b},
    _func{func}{}
   int _a;
   int _b;
  Func _func;
};

int main() {
    auto test = [](){std::cout << "hello\n";};
    Foo<std::function<void(void)>> foo(5,10, test);
    foo._func();

    //array version
    //......................
}

Ответы [ 2 ]

2 голосов
/ 08 апреля 2020

Как насчет этого

//array version
Foo<std::function<void(void)>> a[] = { {5, 10, test}, {1, 2, test} }; 
1 голос
/ 08 апреля 2020

В зависимости от того, какой «массив» вы хотите использовать, я думаю, создание будет простым, здесь с помощью std :: vector. Вы можете использовать любой контейнер, который вам нравится. Доступ здесь осуществляется с помощью [], но также может быть выполнен методом at()

typedef Foo<std::function<void(void)>> FooTypeDef;

int main() {
    auto test = [](){std::cout << "hello\n";};
    FooTypeDef foo(5,10, test);
    foo._func();

    //array version
    //......................
    std::vector<FooTypeDef> array;
    array.push_back(foo);
    array.push_back(foo);
    array[0]._func();
    array[1]._func();
}

И, возможно, используется typedef;)

...