我有一些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;
}
}
每当我需要添加新的" flag"或"州"我必须在我的代码中编辑3个地方。
此外,如果我需要访问任何"标志"或"州"通过它在枚举中写的名字,我不能这样做,因为Eflags (TMP_FLAG_1)
返回TMP_FLAG_1
而不是数字。
另一件重要的事情,我想保留可变的命名,可能有多达数百个"标志"和"州"并且他们有独特的名称而不仅仅是迭代数字(上面的代码只是一个例子,在最终产品中我会根据它们的含义命名所有这些)
如果可能,我希望避免使用std::map
,因为UE4本身不支持它。
因此,核心思想是通过给定的数量访问不同数值类型的一定数量的变量,可能保持变量命名。
答案 0 :(得分:0)
假设您要求语法替代,您可以使用元组吗?在这里 - http://en.cppreference.com/w/cpp/utility/tuple
它们与结构类似,您可以使用std::get通过基于索引的方法检索值。然后,您可以使用if语句进行比较,而不是使用switch语句。
示例 -
#include <iostream>
#include <tuple>
int main()
{
auto t = std::make_tuple(1, true, 25);
std::cout << std::get<0>(t) << "\n"
<< std::get<1>(t) << "\n"
<< std::get<2>(t) << "\n";
}
我没有任何关于UE4的经验以及本机支持的含义,但是有很多替代std :: map的替代方案,如one。