Преобразование перечисления в переменную-член [ПРОБЛЕМА] C

#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 ..