Я разработал серию связанных классов, и для того, чтобы иметь возможность управлять ими, я сделал их производными от одного абстрактного класса.
Все эти классы нуждаются в доступе к ряду общих ресурсов, и я обнаружил, что создаю вектор указателей в каждом, все они идентичны (они обязательно должны быть). Кажется, что создание статического члена в базовом классе дало бы доступ ко всем производным классам к этому вектору, а это значит, что мне нужно собрать его только один раз (после сборки он не изменится, просто посмотрел).
У меня вопрос: если все в порядке, и если да, то как я могу построить его, не вызывая метод «заливки вектора» из одного из производных классов?
Я думал сделать что-то вроде
class Resource {};
enumR {RES0, RES1};
class AbstractClass
{
public:
virtual void OnInit() = 0;
void static fillVector(Resource* pResource, enumR Resourcename)
{lResource[Resourcename]=pResource;};
protected:
static vector<Resource*> lResource;
};
vector<Resource*> AbstractClass::lResource;
int main()
{
Resource res0, res1;
AbstractClass::fillVector(&res0, RES0);
AbstractClass::fillVector(&res1, RES1);
return 0;
};
Затем, когда я создаю экземпляр объекта любого класса, производного от AbstractClass, у меня будет доступ к вектору lResource, чего я и хочу.
Будет ли это работать? Это ужасно? Это нормально?