我想根据其他静态字符数组成员初始化静态字符数组成员 - 但初始化是必要的代码。这可能吗?
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数组时很难。
有更好的方法吗?
答案 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)
}
希望它有所帮助。干杯