2

他の静的char配列メンバーに関して静的char配列メンバーを初期化したいのですが、初期化はコードが必要になるようなものです。これは可能ですか?

class fred {
    static char *a;
    static char *b;
    static char c[4];
}

これでaとbの値は固定されますが、それらの観点からcを作成したいと思います。例えば:

fred::a = "1234"
fred::b = "ab"    
strcpy(c, b);
strncat(c, a, 1);

ただし、fred::aとfred::bを参照するコンストラクターを使用して、char [4]だけの目的でクラスを作成し、その後fredのcを置き換える以外に、cを初期化することはできません。そのクラスのインスタンスで-これはcchar配列を参照するときに厄介です。

もっと良い方法はありますか?

4

3 に答える 3

3

編集:もともと、私はwilmaの友人として、初期化を行うfred静的インスタンスを持っていました。OPがそれがよりきれいになると彼が言ったので、私は内部で宣言wilmaするように例を変更しました。dinofred

fred内部で初期化するジョブを持つクラスの静的インスタンスを作成できcます。

class fred {
    static char *a;
    static char *b;
    static char c[4];
    static struct dino { dino (); } dino_flintstone;
};

char *fred::a;
char *fred::b;
char fred::c[4];
fred::dino fred::dino_flintstone;

fred::dino::dino () {
    fred::a = "1234";
    fred::b = "ab";
    strcpy(fred::c, fred::b);
    strncat(fred::c, fred::a, 1);
}
于 2012-06-19T01:43:13.947 に答える
0

連続する文字列リテラルは、コンパイル時に連結されます。

#define A "1234"
#define B "ab"
fred::a = A;
fred::b = B;    
fred::c = A B;
于 2012-06-19T01:42:36.083 に答える
0

きれいな方法ではできませんが、ここに示すように、トリックを使用して静的コンストラクターをシミュレートできます。

その静的コンストラクターで、初期化できますc。これは可能な実装です:

class fred {
    static char *a = "1234";
    static char *b = "ab";
    static char c[4];
    public:
    fred(){
       strcpy(fred::c, fred::b);
       strncat(fred::c, fred::a, 1);
    }    
}

class Fred_staticInitializer{  
    static fred staticInitializer;  //This does the trick (launches constructor)
}

それが役に立てば幸い。乾杯

于 2012-06-19T01:42:47.260 に答える