0

次のように定義された特定のクラス:

struct A {
   std::vector<int> aList;
   A() {
     for (int i = 0; i < ARRAY_LENGTH; i++)
       aList.push_back(0);
   }
}

A の引数なしのコンストラクターは、プログラムの他の部分で必要です。ARRAY_LENGTH を変化させることは可能ですか (たとえば、外部ファイルからの読み取り/GUI からの変更)。

  • ステップ 0: ARRAY_LENGTH = 10
  • ステップ 1: aList.size() を 10 として初期化して、A のオブジェクトを作成します。
  • ステップ 2: A の新しく作成されたオブジェクトを使用する
  • ステップ 3: 以前に作成された A のすべてのオブジェクトを削除する
  • ステップ 4: プログラムが終了するまで、ARRAY_LENGTH の値を変えてステップ 0 から 4 を繰り返します。

ARRAY_LENGTH の変更は、外部ファイルから行うか、GUI で変更する必要があります。プログラムの他の部分は、この値に書き込みアクセスできません。どうすればこの要件を達成できますか?

編集:既存のオブジェクトを破棄する場合、プログラムの他の部分によって処理されます

編集 (2): 私はシミュレーション プロジェクトを行っています。クラス A の aList は、ファミリ サイズの可能な pdf 値を表します。(たとえば、aList[0] = 0.5、aList[1] = 0.2、aList[3] = 0.3)。最大ファミリ サイズの変更は、プログラムが異なるシナリオを実行している場合にのみ発生します。つまり、以前に作成した A のオブジェクトを破棄して、シミュレーションをリセットします。

4

2 に答える 2

0

アプローチの 1 つは、外部 xml ファイルを使用して ARRAY_LENGTH の値を指定することです。ただし、これには、コードに xml ファイルを含め、それを解析して変数 ARRAY_LENGTH の値をフェッチするというオーバーヘッドが伴います。

たとえば、xml ファイルは次のようになります。

< xml version="1.0" encoding="UTF-8" standalone="no" ?> 
-< root>
        < LEN_VAR ARRAY_LENGTH=10/>
< /root>

次に、C/c++ 用の xml パーサーをコードに含めてコンパイルする必要があります。(さまざまなパーサーが無料で利用できます。たとえばhttp://biocpp.sourceforge.net/download/xmlParser.cpp ) 次に、このクラスのオブジェクトを作成する前に、値 ARRAY_LENGTH を取得する必要があります。

再コンパイルせずに、xml コードの値を変更できます。

変更のためにファイルに通知を入れると、値が変更されたときに通知され、XML ファイルから値を再読み取りすると、プログラムは新しい値で続行できます。どのプラットフォームを使用しているかはわかりませんが、Linux でファイル リスナーを作成するにはどうすればよいですか? を確認してください。またはC++ でファイルの変更をプログラムに監視させるにはどうすればよいですか? ファイル変更の通知用。

于 2013-03-21T07:36:43.567 に答える