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);

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

有没有更好的办法?

4

3 回答 3

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);
}
于 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 回答