静的変数、またはそうするための他の方法について質問があります。
マスタークラスのPatternMatcherがあります。使用するマッチャーに応じて、そこから派生したユニットがいくつかあります。ここで、各サブクラスはfloatのベクトルを格納する必要がありますが、各クラス内では定数です。そのベクターのデータは初期化中に読み取られ、最大1GBのサイズにすることができます(私が持っている最小のものは1MB、最大のものは1GBです)。現在、たとえばMatcher_Aのインスタンスが2つある場合、2倍のメモリが割り当てられます。どのマッチャーを使用するかは事前にわかりません(1回の実行で3つのマッチャーになり、同じマッチャーを数回使用できます)。実行時に、必要なマッチャーがすでにどこかで初期化されているかどうかを確認したくないのです。これは、変更を加えるたびに追加のコードが必要になるためです。
現在、3つのマッチャーを割り当てています
PatternMatcher* a = new PMMatcherA();
PatternMatcher* b = new PMMatcherB();
PatternMatcher* c = new PMMatcherC();
、ただし、ユーザーが選択するため、たとえばAとCが同じである可能性があります。を介してチェックを実行するとtypeid(a).name();
、どのクラスで開始したかに関係なく、結果としてPatternMatcherが得られます。PatternMatcherは、基本的に純粋に仮想クラスです。
静的とは、変数がさまざまな割り当てで一定であることを意味すると常に思っていましたが、ベクトルを静的として定義すると、リンカー解決エラーが発生します。以前の反復では、これらのベクトルをグローバルにしましたが、クラスにローカライズすることをお勧めします。
初期化時のベクトルを次の初期化ですでに使用できるようにするために使用する必要のあるキーワードは何ですか?ベクトルサイズが0より大きいかどうかを簡単にチェックするだけで十分ですが、すべてのオブジェクトは独自のベクトルを使用します。