3

私はクラスを持っています:

Temp.h:
[...]
class Temp{
public:
    Temp(vector<vector<double> > vect);
    const static Temp VAR1;
    const static Temp VAR2;
    ...

};

double の配列 {{0,1,0,1},{1,0,1,0}} を使用して VAR1 と VAR2 を初期化したい。しかし、私はこれを次のようにすることはできません:

const Temp::VAR1(...);

、配列の配列からベクトルのベクトルを構築する「1行」演算子がないためです。次のような構造を構築することを考えました。

B{
    vector<vector<double> > vect;

    B& add (double[] a, int number) {... 
    push elements from array to vector and add this vector to vect ...
    return *this;
    }

    Temp build() {return Temp(vect);}
}

しかし、私が電話すると:

 B().add({0,1,0,1},4).add({1,0,1,0},4).build();

コンパイラは {0,1,0,1} を配列として認識しませんが、double* として認識し、変更できません。

複数の行で const static メンバーを初期化するためのメソッドまたは同様のものを作成するオプションはありますか?

十分に簡単に書いたと思いますが、そうでない場合は後で編集します。

4

2 に答える 2

3

C++11 では、統一された初期化構文を使用します。

const Temp::VAR1{{0,1,0,1},{1,0,1,0}};

C++03 との互換性を維持する必要がある場合は、次を使用することをお勧めしboost::assignます。

const Temp::VAR1 = list_of(list_of(0)(1)(0)(1))(list_of(1)(0)(1)(0));
于 2012-07-25T16:20:18.627 に答える
2

それを初期化する静的関数を作成します。

Temp InitTempVar1()
{
    vector<vector<double> > init;
    // initialize init...
    return Temp(init);
}

Temp InitTempVar2()
{
    vector<vector<double> > init;
    // initialize init...
    return Temp(init);
}

const Temp Temp::VAR1 = InitTempVar1();
const Temp Temp::VAR2 = InitTempVar2();
于 2012-07-25T16:25:31.787 に答える