Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
117 / 121 / 42
Регистрация: 25.08.2012
Сообщений: 1,294

Типизированные перечисления как флаги

16.03.2016, 17:29. Показов 2513. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Очень понравилась идея с указанием идентификатора типа перечисления при обращении к нему, код раза в два становится приятней. Но как использовать такие перечисления в качестве класса? Обычные можно, поскольку они по дефолту int:
C++
1
2
3
4
5
6
7
8
9
enum Trouble {
   disconnect,
   bad_data,
   ...
};
 
...
 
Trouble tr = disconnect | bad_data;
Если добавить class, так не выйдет. Есть ли выход? Постоянное приведение к числовому типу при битовых операциях, понятно, выходом не является
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.03.2016, 17:29
Ответы с готовыми решениями:

Как реализовать флаги в параметрах функции
Объясните пожалуйста как реализовать флаги в параметрах функции. К примеру: есть такие флаги left middle right drowPoints...

Как правильно впихнуть и использовать перечисления в структуре?
// Test_Project.cpp: определяет точку входа для консольного приложения. // #include "stdafx.h" #include <iostream> ...

Упражнение из Лафоре. Тема Перечисления. Как правильно сделать вывод?
Условие: в программе определен печесляемый тип данных etype, отражающий должность сотрудника enum etype { laborer, secretary, manager,...

4
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
16.03.2016, 17:42
Лучший ответ Сообщение было отмечено tnk500 как решение

Решение

tnk500,
C++
1
2
3
4
5
6
7
8
9
class SomeClass
{
public:
    enum Trouble {
       disconnect    =    1 << 1,
       bad_data      =    1 << 2,
       ...           =    1 << ...
    };
};
1
117 / 121 / 42
Регистрация: 25.08.2012
Сообщений: 1,294
16.03.2016, 17:58  [ТС]
GbaLog-, делал то же самое, только с функцией приведения, ну и типизированное перечисление засовывал. Было бы неплохо вообще, если бы организовали неявное приведение к типу, от которого образуется перечисление (enum class Enum : short)

Добавлено через 4 минуты
Только теперь при объявлении переменной её тип придётся отмечать как "SomeClass::Trouble". Ну да ладно.
0
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
16.03.2016, 18:00
tnk500, В общем не знаю, что вы там делали, но вот что я раскопал у себя в "архиве".
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
// flags
#include <iostream>
using namespace std;
 
class flags {
    public:
        enum sMode {
            eFirst  = 1<<1,
            eSecond = 1<<2,
            eThird  = 1<<3
        };
        
        flags(const int _flags) : m_flags(_flags) {}
        
        void showFlags() const {
            if(has_(eFirst))
                cout << "First flag enabled" << endl;
            if(has_(eSecond))
                cout << "Second flag enabled" << endl;
            if(has_(eThird))
                cout << "Third flag enabled" << endl;
            cout << endl;
        }
        
        void show(const int _flag) {
            m_flags |= _flag;
        }
        
        void hide(const int _flag) {
            m_flags &= (~_flag);
        }
        
        void unsetAll() {
            m_flags &= (~m_flags);
        }
        
    private:
        bool has_(const int _flags) const {
            return (_flags & m_flags) == _flags;
        }
        int m_flags;
};
 
int main()
{
    typedef flags MODE;
    flags flag(MODE::eFirst|MODE::eSecond);
    flag.showFlags();
}
0
117 / 121 / 42
Регистрация: 25.08.2012
Сообщений: 1,294
16.03.2016, 18:11  [ТС]
GbaLog-, а, всё понял. Спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.03.2016, 18:11
Помогаю со студенческими работами здесь

Установить флаги OF, DF, ZF и CF. Остальные флаги сбросить
Прошу помочь со следующим заданием: Установить флаги OF, DF, ZF и CF. Остальные флаги сбросить. Как я понял, нужно использовать команды...

Как работают флаги?
Здравствуйте! Объясните мне, на хлопский разум, как работают флаги? Вот как я понимаю: public enum Options { Settings, ...

Как инвертировать флаги SF ZF AF PF CF
как инвертировать флаги SF ZF AF PF CF

Как найти флаги
1. Как найти флаг в картинке 2. Как найти флаг (QebCixdCloQefpQxphFp:NiKKOTPaxeXsdNIpDRTWbeBVEAFFjQdP) 3. Как найти флаг в файле...

Как использовать битовые флаги в ПЛК Omron CX-One?
Только начинаю изучать программирование ПЛК. Надо написать программу для ПЛК CP1L от Омрона. Использую его среду программирования,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru