У меня есть ряд переменных 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. Итак, основная идея заключается в доступе к определенному количеству переменных разных числовых типов по заданному числу, возможно, с сохранением имен переменных.
Спасибо!
Зачем вам нужен доступ к ним по индексу? постоянный доступ времени или синтаксический сахар? –
Любая причина, по которой вы не хотите использовать вектор ints и вектор bools? – UKMonkey
хорошо, если они будут только bools и целыми числами, и если число и дублирование довольно низки, вы можете просто использовать массив целых чисел. –