我可以在抽象类中有静态数据成员吗?

Kia*_*ian 5 c++ abstract-class static-members

我设计了一系列相关的类,为了能够管理它们,我让它们派生自一个抽象类。

这些类都需要访问一系列共享资源,我发现自己在每个类中都创建了一个指针向量,所有这些都相同(它们必须相同)。似乎在基类中创建一个静态成员将使所有派生类都可以访问此向量,这意味着我只需要构建一次(构建后也不会更改,只需查找即可)。

我的问题是这是否可以,如果可以,我该如何构建它,而无需从派生类之一调用“填充向量”方法?

我的想法是做类似的事情

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;
};
Run Code Online (Sandbox Code Playgroud)

然后,当我实例化从 AbstractClass 派生的任何类的对象时,我就可以访问 lResource 向量,这正是我想要的。

这行得通吗?可怕吗?可以吗?

Pup*_*ppy 0

更好的解决方案是只创建一个带有向量的对象,然后只实例化它一次,并为其他类提供指向它的指针或引用。除非必要,否则绝对应该避免使用静态数据,而这并不是必要的。