Так что я не знаю, возможно ли это, но у меня есть настройка, которая выглядит примерно так:
template <class T>
struct Something;
struct Example {
//not sure how this should be defined
//I was thinking void*, but I can't use pointers as the 'Something' class moves around the instances
//and I don't want to have to constantly update the pointers.
std::vector<?> addedTypes;
template<typename T>
void addThing() {
addedTypes.push_back(T);
Something<T>::addThing(*this);
}
void destroy() {
for (auto T : addedTypes) {
Something<T>::removeThing(*this);
}
}
};
template <class T>
struct Something {
static void addThing(Example e) {/*...*/}
static void removeThing(Example e) {/*...*/}
};
По сути, я хочу знать, как я могу составить списоктипы, которые были добавлены в цикл так, чтобы позже я мог вызвать статическую функцию удаления?
Редактировать: Добавление немного больше информации, как это предлагается в комментариях.
Это только для примера, это на самом делесистема компонентов объекта, где «Пример» является объектом, а «Нечто» является компонентом CRTP.Вся логика хранится в компонентах, кроме идентификатора и некоторых вспомогательных функций в сущности.Единственная недостающая часть - это способ уничтожить компоненты (различных типов) из сущности (я могу сделать это уже из компонентов, но без типов, я не уверен, как это сделать из сущности.
По той причине, что статические функции вызываются в классе Something, они взаимодействуют с другими членами статического класса (например, std::vector<T> list
) и не затрагивают состояние экземпляра.