我设计了一系列相关的类,为了能够管理它们,我让它们从一个抽象类派生。
这些类都需要访问一系列共享资源,我发现自己在每个类中创建了一个指针向量,它们全部相同(它们必然必须相同)。似乎在基类中创建一个静态成员将使所有派生类都可以访问该向量,这意味着我只需要构建它一次(它在构建后也不会改变,只需查找)。
我的问题是这是否可以,如果可以,我如何构建它,而不从派生类之一调用“填充向量”方法?
我的想法是做类似的事情
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 向量,这就是我想要的。
这行得通吗?可怕吗?可以吗?
它会起作用,其中工作=编译和运行。
但是,所有子类都将访问相同的静态向量,这意味着每个子类不会有不同的静态向量副本。
为了更好地解释我的意思,请阅读以下主题:
静态字段可以继承吗? https://stackoverflow.com/questions/998247/are-static-members-inherited-c
解决方案:
一种解决方案是让您的父类成为模板类,如下所示:
template<T>
class Parent<T> {
public:
static std::vector<T> sharedResource_;
}
class ChildA : Parent<ChildA> {
}
class ChildB : Parent<ChildB> {
}
在上面的代码中,您将获得所有人的共享资源实例ChildA 和另一个共享的实例儿童 B.
这样对吗?
嗯,我觉得这不算好。与此相关的讨论之一是对以下 SO 问题的评论以及我对该问题的回答:
如何在 C# 中实现“静态重载 const”? https://stackoverflow.com/q/6212723/365188
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)