有没有办法有条件地初始化全局静态变量?

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

使用运行时输入不是初始化静态对象的选项。您必须在使用赋值操作初始化后修改数组。