#c #templates #enums
#c #шаблоны #перечисления #c
Вопрос:
Я пытаюсь создать поиск для переменных разных типов, соответствующих различным значениям перечисления в структуре.
Вот решение, которое у меня есть на данный момент:
struct X {
int x;
std::string y;
char z;
enum class MYENUM {
X, Y, Z
};
template<MYENUM TYPE>
autoamp; GetAttribute() {
if constexpr (TYPE == MYENUM::X) return x;
else if constexpr (TYPE == MYENUM::Y) return y;
else if constexpr (TYPE == MYENUM::Z) return z;
}
};
Я нахожусь в поисках более элегантного решения, так как в моем реальном проекте у меня много разных переменных внутри моей структуры, и, таким образом, блок if / else становится очень большим.
Комментарии:
1. Похоже, у функции нет ничего, на основании чего она могла бы вывести аргументы шаблона.
Ответ №1:
Возможно, что-то вроде этого:
template<MYENUM TYPE>
autoamp; GetAttribute() {
return std::get<int(TYPE)>(std::tie(x, y, z));
}
(Вы по сути изобретаете std::tuple
.)
Комментарии:
1. По сути, вы
tie
вводите три переменные вtuple
, а затем присоединяетесь к ним черезenum
. Вау, умно и в стиле pythonesque ..