Я пытаюсь создать систему, способную выделять любой тип и группировать одинаковые типы вместе в массивах.Как создать пул нескольких типизированных объектов в C++
Я хочу, чтобы иметь возможность извлекать каждый массив позже, чтобы я мог выполнять итерацию по каждому типу.
Что-то вроде этого:
ObjectDatabase
{
template<typename T>
T* Allocate();
template<typename T>
Array<T>& GetObjects();
}
Мой тип массива фактически пул так распределение/удаление быстро.
Я думал о сопоставлении каждого массива в std :: map, используя int, представляющий идентификатор типа для каждого T, но тогда каждый тип T должен был бы наследовать от базового класса, поэтому его можно сохранить на карте, и, таким образом, приводит к кастингу, когда я перебираю массив.
Я думаю, что этот шаблон был сделан раньше, но я не уверен, как.
Может кто-нибудь помочь?
Update:
Так что я пытаюсь в основном создать структуру, как это:
struct ObjectDatabase
{
Array<Entities> mEntities;
Array<Transforms> mTransforms;
Array<Physics> mPhysics;
Array<Graphics> mGraphics;
}
Но я хотел бы каким-то образом создать набор массивов во время компиляции .. используя шаблоны?
Затем обеспечивают функции шаблона, чтобы получить доступ к каждому массиву, и выделить из каждого массива
Разве вы не изобретаете вариант? Вы можете использовать boost :: variant или QVariant как T и избегать шаблона или посмотреть, как они реализованы, если вы хотите, чтобы ваш собственный объект –
. Вы можете обернуть массив (например, 'vector') в качестве члена данных в который основывается на базовом классе. Например. 'struct base {/ * чистые виртуальные функции * /}; template struct wrapper: base {vector arr;/* virtual functions * /}; 'А затем сохраните' map 'через некоторое type->' int' mapping. –
dyp
Я не хочу никаких виртуальных функций, так как T - это всего лишь структура во всех случаях без методов. Im просто хранит наборы данных. Вы можете думать об этом как о наборе массивов, где каждый массив хранит один тип. Если я использую boost :: variant, я считаю, что мне нужно получить соответствующий тип для элемента в массиве, поскольку я повторяю его, что замедлит работу. – Mash