Вы не сможете делать то, что хотите, используя инструменты времени компиляции, такие как шаблоны.
Что вы, вероятно, должны сделать, это самим управлять памятью. Создайте класс, который будет содержать число (количество элементов в массиве) и указатель char *
. При желании иметь N структур типа T и массив int size[]
, дающий размеры для различных Ts, выделите память с new char(N * size[T])
. Сохраните размер, и вы готовы к работе.
Чтобы получить доступ к памяти, вы можете использовать operator[]
и вернуть void *
или мастер-структуру, как описано ниже. (То, что вы возвращаете, должно быть указано во время компиляции, поэтому вы не можете использовать ни один из пятидесяти с лишним типов структуры.)
В этот момент вам нужно иметь функции, которые превращают необработанные байты в любые поля, которые вам нравятся, и наоборот. Они могут быть вызваны функцией operator[]
. Вы не можете ничего сделать со структурой, тип которой не определен во время компиляции, поэтому вам, вероятно, понадобится основная структура с большим количеством полей, чтобы она могла обрабатывать все int
s, все bool
s, все float
s, все double
и т. д., которые будут иметь любые ваши структуры. Вам, конечно, понадобятся таблицы, чтобы показать, какие поля являются действительными.
Это большая работа, и я должен спросить, действительно ли это необходимо. Все это действительно поможет тебе купить что-нибудь полезное?