我有一些bool和int变量,需要通过某种索引访问。我找到了一种方法,但似乎有点太复杂。有没有办法以更优雅的方式做到这一点?с++索引访问不同类型的结构变量
现在在头文件中我有结构
struct FDialogueFlags
{
bool tmpFlag1;
bool tmpFlag2;
// bool tmpFlagX;
int tmpState1;
int tmpState2;
// int tmpStateX;
};
和枚举
enum class Eflags
{
// NAME = flag_ID,
TMP_FLAG_1 = 1,
TMP_FLAG_2 = 10,
// TMP_FLAG_X = XX,
TMP_STATE_1 = 101,
TMP_STATE_2 = 110,
// TMP_STATE_X = XXX,
};
而在源文件我已经功能,对于给定的索引返回值 - FLAG_ID
int GetFlagValue(int flag_ID)
{
switch (Eflags(flag_ID))
{
case (Eflags::TMP_FLAG_1):
return flagsAndStates.tmpFlag1;
break;
case (Eflags::TMP_FLAG_2):
return flagsAndStates.tmpFlag2;
break;
/*case (Eflags::TMP_FLAG_X):
return flagsAndStates.tmpFlagX;
break;*/
case (Eflags::TMP_STATE_1):
return flagsAndStates.tmpState1;
break;
case (Eflags::TMP_STATE_2):
return flagsAndStates.tmpState2;
break;
/*case (Eflags::TMP_STATE_X):
return flagsAndStates.tmpStateX;
break;*/
default:
break;
}
}
这样每次我需要添加新的“标志”或“状态”时,我必须在我的代码中编辑3个位置。
再说,如果我需要以书面枚举它的名称来访问任何“标志”或“国家”,我不能这样做,因为Eflags (TMP_FLAG_1)
回报TMP_FLAG_1
,而不是数量。另一件重要的事情是,我想保留变量名称,可能会有多达数百个这样的“标志”和“状态”,并且它们具有唯一的名称而不仅仅是迭代数字的代表性(上面的代码只是一个例如,在最终产品中,我会根据它们的含义命名它们) 如果可能,我想避免使用std::map
,因为它不受UE4本机支持。 所以,核心思想是通过给定的数字访问一定数量的不同数字类型的变量,可能会保留变量命名。
谢谢!
为什么你需要访问它们索引明智?持续时间访问或语法糖? –
任何你不想使用int和bools向量的理由? – UKMonkey
好吧,如果这些将只是布尔和整数,并假设数量和重复是相当低的,你可以使用整数数组。 –