You could use a std::tuple
#include <tuple>
template <typename... Types> class Data
{
std::tuple<Types...> items;
};
struct Item1
{
int a;
};
struct Item2
{
float x, y, z;
};
struct Item3
{
std::string name;
};
int main()
{
Data<Item1, Item2> data1;
Data<Item3> data2;
}
Try it here