java стиль перечислений в с ++ - PullRequest
0 голосов
/ 09 февраля 2020

В Java Я могу работать с перечислениями, как классы. Например, я могу создать конструктор enum, который принимает значение и значение init enum и class stati c function values ​​() для вывода списка всех значений enum.

Как это сделать в c ++?

Существует код java:

enum EquationType {

    LINE("LINE"), LINE3D("LINE3D"), BEZIER("BEZIER"), PLANE("PLANE");

    EquationType(String curve_type) {

        type = curve_type;

    } //END: CurveType()

    String type; // enum's member variable that store symbolic name of type (for utilite using)

    public String get_type_string() {

        return type;

    } //END: get_type_string()

    public static EquationType _bystring(String type) throws Exception {

        for (EquationType value : values()) { // search by list of enum's values

            if (value.get_type_string().equals(type.trim().toUpperCase())) {

                return value;

            }
        }

    } //END: _bystring()

} //END: enum EquationType

Создает enum с 4 членами (LINE, LINE3D, BEZIER, PLANE). Этот тип класса перечисления имеет функцию, которая возвращает тип перечисления по значению имени строки, например EquationType._bystring ("PLANE"), будет возвращать EquationType.PLANE. Он использует функцию values ​​(), которая перечисляет все возможные значения типа enum.

Есть ли какой-нибудь аналог в c ++?

1 Ответ

0 голосов
/ 09 февраля 2020
#include <string>
#include <unordered_map>

enum EquationType {
  LINE, LINE3D, BEZIER, PLANE
};

int main() {
  std::unordered_map<std::string, EquationType> equationMap({
    {"LINE", LINE},
    {"LINE3D", LINE3D},
    {"BEZIER", BEZIER},
    {"PLANE", PLANE}
  });

  EquationType line = equationMap["LINE"];
}

Отказ от ответственности: Я не скомпилировал это. Возможно, я испортил синтаксис.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...