如何使用代码初始化静态成员char数组

时间:2012-06-19 01:33:52

标签: c++

我想根据其他静态字符数组成员初始化静态字符数组成员 - 但初始化是必要的代码。这可能吗?

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

现在a和b将具有固定值,但我想根据它们构造c。 EG:

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

但是我无论如何都看不到初始化c,除了为一个char [4]创建一个类,其中一个构造函数引用了fred :: a和fred :: b,然后替换c在fred中使用该类的实例 - 在引用c char数组时很难。

有更好的方法吗?

3 个答案:

答案 0 :(得分:3)

编辑:最初,我有wilma作为fred的朋友,而wilma的静态实例正在进行初始化。我已经更改了示例,以便在dino内声明fred,因为OP说他认为这样会更清晰。

您可以在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);
}

答案 1 :(得分:0)

Consequtive字符串文字在编译时串联...

#define A "1234"
#define B "ab"
fred::a = A;
fred::b = B;    
fred::c = A B;

答案 2 :(得分:0)

您不能以干净的方式,但您可以使用技巧来模拟静态构造函数,如图here所示。

在该静态构造函数中,您可以初始化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)
}

希望它有所帮助。干杯