有没有办法有条件地初始化全局静态变量?
Is there a way to conditionally initialize a global static variable?
所以我当前的代码如下所示:
static Item fields[] =
{
{GROUP1, TEXT1},
{GROUP2, 0},
}
现在我需要进行更改,仅当满足特定条件时才初始化 GROUP2,否则需要使用 GROUP3 进行初始化。所以我尝试了以下方法:
static Item fields[] = (flagSet)?
{
{GROUP1, TEXT1},
{GROUP2, 0},
} : {
{GROUP1, TEXT1},
{GROUP3, 0},
}
但这没有用。我知道一种方法是使用 #ifdef 宏,但是这个 flagSet 在运行时发生,并且基于它我需要初始化静态数组。此外,由于静态初始化发生在其他任何事情之前,是否可以完全做到这一点?
Is there a way to conditionally initialize a global static variable?
是的。这些方法与有条件地初始化非全局非静态变量几乎相同。
但是您不能有条件地初始化数组。您可以使用一些间接的方式:
static Item fields_true[] {
{GROUP1, TEXT1},
{GROUP2, 0},
};
static Item fields_false[] = {
{GROUP1, TEXT1},
{GROUP3, 0},
};
static auto& fields =
flagSet
? fields_true
: fields_false;
或者,您可以有条件地初始化数组元素。由于只有一个元素有差异,因此在这种情况下甚至没有任何重复:
static Item fields[] = {
{GROUP1, TEXT1},
{flagSet ? GROUP2 : GROUP3, 0},
};
but this flagSet happens at runtime
使用运行时输入不是初始化静态对象的选项。您必须在使用赋值操作初始化后修改数组。
所以我当前的代码如下所示:
static Item fields[] =
{
{GROUP1, TEXT1},
{GROUP2, 0},
}
现在我需要进行更改,仅当满足特定条件时才初始化 GROUP2,否则需要使用 GROUP3 进行初始化。所以我尝试了以下方法:
static Item fields[] = (flagSet)?
{
{GROUP1, TEXT1},
{GROUP2, 0},
} : {
{GROUP1, TEXT1},
{GROUP3, 0},
}
但这没有用。我知道一种方法是使用 #ifdef 宏,但是这个 flagSet 在运行时发生,并且基于它我需要初始化静态数组。此外,由于静态初始化发生在其他任何事情之前,是否可以完全做到这一点?
Is there a way to conditionally initialize a global static variable?
是的。这些方法与有条件地初始化非全局非静态变量几乎相同。
但是您不能有条件地初始化数组。您可以使用一些间接的方式:
static Item fields_true[] {
{GROUP1, TEXT1},
{GROUP2, 0},
};
static Item fields_false[] = {
{GROUP1, TEXT1},
{GROUP3, 0},
};
static auto& fields =
flagSet
? fields_true
: fields_false;
或者,您可以有条件地初始化数组元素。由于只有一个元素有差异,因此在这种情况下甚至没有任何重复:
static Item fields[] = {
{GROUP1, TEXT1},
{flagSet ? GROUP2 : GROUP3, 0},
};
but this flagSet happens at runtime
使用运行时输入不是初始化静态对象的选项。您必须在使用赋值操作初始化后修改数组。