简体   繁体   中英

Initialize an array of template structures

The following snippet of code simply creates a structure that has three members. One of them is a callback function. I would like to initialize an array of these structures but I don't know the syntax, where I can have multiple callbacks with varying prototypes.

#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
    //......................
}

How about this

//array version
Foo<std::function<void(void)>> a[] = { {5, 10, test}, {1, 2, test} }; 

Depending on what "array" you want to use, I think the creation is straight-forward, here with std::vector. You can use any container you like. Accessing here done with [], but could also be done with the at() method

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();
}

And maybe use a typedef;)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM