1

抽象ベースクラスがあります。これは、いくつかのクラスを派生させるために使用されます。これらのクラスの一部のプロパティはすべてのクラスで共有されており、変更できないようにする必要があります。

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にはインスタンス化されたクラスの数が含まれ、インデックスは各クラスの一意の識別子です。

私が抱えている問題は、* anArrayと派生クラスの数が実行時に設定され、クラスがインスタンス化された後、これらの値を変更したくないということです。

私は少し戸惑っています:

1)* anArray値はどこに設定すればよいですか?派生クラスのランダムなもので?

2)変数を変更できない場合は、constに設定する必要があります。しかし、コンパイル時の値がわからない場合、constに設定するにはどうすればよいですか?

4

1 に答える 1

1

静的変数を使用する代わりに、これを実現できるパターンがいくつかあります。

多くの理由で最善ではありませんが、実装するのが最も簡単なのは、共有変数をシングルトン基本クラスに配置することです(参照:GoFシングルトンパターン)。

もう1つのよりきれいなソリューションは、GoFAbstractFactoryのようなファクトリパターンである可能性があります。

編集:また、ドキュメントのコメントについては、http://www.parashift.com/c++-faq/static-init-order-on-first-use.htmlを参照してください。

:)

于 2012-12-16T22:21:56.603 に答える