@spezcial
Начинающий программист

Можно ли вывести список enum?

#include <iostream>



enum etype { laborer, secretary, manager, accountant, executive, researcher };

struct date
{
    int day;
    int month;
    int year;
};

struct employee
{
    int number;
    float pension;
    etype post;
    date start;
};



int main()
{
    employee first;
    char dummychar;

    std::cout << "Добрый день! Введите ваши данные о сотруднике!\nДля начала его номеp\b";
    std::cin >> first.number;

    std::cout << "Отлично. Теперь введите его оклад.\n";
    std::cin >> first.pension;

    std::cout << "Введите дату начала его работы в формате dd/mm/year\n";
    std::cin >> first.start.day >> dummychar >> first.start.month >> dummychar >> first.start.year;

    std::cout << "Осталось только ввести его должность. Не ошибитесь\n";
    std::cout << "Представленные должности: \n";

    for(first.post i = laborer; i <= researcher; ++i) //Интересует именно вот эта часть кода
    {
        std::cout << i << " ";
    }
    

    std::cin >> first.post;

    
    
    return 0;
}


Думаю, моя мысль ясна. Хочу лишь поинтересоваться, возможно ли что-то подобное, чего я хочу? Буду очень благодарен за правильные напутствия.
  • Вопрос задан
  • 412 просмотров
Решения вопроса 2
@res2001
Developer, ex-admin
Можно с помощью такого Сишного подхода:
// .h файл
#define ENUM_MAP(XX) \
  XX(0, laborer, Laborer help msg) \
  XX(1, secretary, Secretary help msg)\
  XX(2, manager, Manager help msg)\
  XX(3, accountant, Accountant help msg)\
  XX(4, executive, Executive help msg)\
  XX(5, researcher, Resercher help msg)

enum etype
{
#define XX(num, name, string) name = num,
  ENUM_MAP(XX)
#undef XX
 };

// .cpp файл, включающий предыдущий .h
#define XX(num, name, string) #string,
const char * enum_msg[] = [
  ENUM_MAP(XX)
]
#undef XX

Такими образом имеем массив enum_msg со строками из третьего параметра XX в ENUM_MAP.
Набор параметров в XX можно варьировать как угодно.
Подобная техника применяется, например, тут.
Ответ написан
Комментировать
SerJook
@SerJook
кодер
На чистых плюсах решения получаются трудно поддерживаемыми, можно воспользоваться библиотекой better-enums.

#include "enum.h"

BETTER_ENUM(etype, int, laborer, secretary, manager, accountant, executive, researcher);

//...
struct employee {
    int number;
    float pension;
    etype post = etype::laborer;
    date start;
};

int main()
{
    //... пропущено
    for (etype i : etype::_values())
    {
        std::cout << i << " ";
    }
    std::cout << std::endl;
    std::string etypeStr;
    std::cin >> etypeStr;
    first.post = etype::_from_string(etypeStr.c_str());   
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы