在抽象基类的静态常量(static const variables in abstract base

2019-09-30 05:11发布

我有一个抽象基类,这是用于导出一些类。 这些类的一些性质各阶层共享,而这些应该是不可修改的。

为了让所有10班,我会让它静态共享的变量。

class ABC{
public:
  static int *anArray;
  int index;
  static int tot_index;
  virtual void print()=0;
  ABC(){index=tot_index++;};
  virtual ~ABC(){};
};

这工作得很好,tot_index将包含实例化类的数量,并且该指数为每个类的独特indentifier。

我的问题是,* anArray和派生类的数量在运行时设置和课程都被实例化后,我不想改变这些值。

我升技不解:

1)我应该在哪里设置* anArray价值? 只是在一些随机派生类的吗?

2)如果变量应该是不可修改的,那么我应该将其设置为const。 但是,如果我不知道这个值是在编译的时候是什么,我该如何设置它为const?

Answer 1:

而不是使用静态变量有一定的模式,可以实现这一目标。

最容易实现的,虽然不是最好的原因是多方面的,要放共享变量在一个单独的基类(参考:四人帮Singleton模式)。

另外,更漂亮的解决方案可能是一些工厂模式,如GoF的抽象工厂。

编辑:另外,对于文档的评论,请参阅: http://www.parashift.com/c++-faq/static-init-order-on-first-use.html

:)



文章来源: static const variables in abstract baseclass