Форум программистов, компьютерный форум CyberForum.ru

Как реализовать флаги в параметрах функции - C++

Восстановить пароль Регистрация
 
Igor Fender
1 / 1 / 0
Регистрация: 09.07.2014
Сообщений: 167
29.07.2014, 00:53     Как реализовать флаги в параметрах функции #1
Объясните пожалуйста как реализовать флаги в параметрах функции.
К примеру:

есть такие флаги left middle right

C++
1
drowPoints (тут параметры флаги);
Вот так я эти флаги прописываю

C++
1
drowPoints (left | right);
А потом как-то мне надо понять, что прописано, а что нет.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.07.2014, 00:53     Как реализовать флаги в параметрах функции
Посмотрите здесь:

bool в параметрах функции C++
C++ можно ли в с++ вызвать переменную из одной функции в другую т.е. мы переменну задали в одной функции а использовали в другой... и как это реализовать?
C++ Указатели в параметрах функции
C++ Указатель на имя файла как аргумент функции. Как реализовать?
Взаимный обмен значений указателей в параметрах функции C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
rikimaru2013
C++ Game Dev
 Аватар для rikimaru2013
2133 / 966 / 222
Регистрация: 30.11.2013
Сообщений: 3,231
29.07.2014, 02:34     Как реализовать флаги в параметрах функции #2
А теперь объясните, какое извращение вы реализуете - а мы подскажем как надо.
CyberSolver
 Аватар для CyberSolver
101 / 74 / 17
Регистрация: 23.07.2014
Сообщений: 686
Записей в блоге: 1
29.07.2014, 06:48     Как реализовать флаги в параметрах функции #3
Как я понял, вы хотите написать что-то вида
C++
1
2
3
4
5
#define LEFT_FLAG 1
#define MIDDLE_FLAG 2
#define RIGHT_FLAG 4
 
void drowPoints(int flags);
Ну или более C++-way:
C++
1
2
3
enum Flag {LEFT = 1, MIDDLE = 2, RIGHT = 4};
 
void drowPoints(Flag flags);
Jewbacabra
1790 / 1505 / 538
Регистрация: 24.04.2014
Сообщений: 4,216
29.07.2014, 10:08     Как реализовать флаги в параметрах функции #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#define LEFT 1
#define MIDDLE 2
#define RIGHT 4
void drawPoints(int flags {
    if (flags & LEFT) {
        // LEFT flag
    }
    if (flags & RIGHT) {
        // RIGHT flag
    }
    if (flags & MIDDLE) {
        // LEFT flag
    }
})
Igor Fender
1 / 1 / 0
Регистрация: 09.07.2014
Сообщений: 167
29.07.2014, 11:46  [ТС]     Как реализовать флаги в параметрах функции #5
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
А теперь объясните, какое извращение вы реализуете - а мы подскажем как надо.
Просто видел функции, в которых это реализовано.
Ну к примеру в Qt:
C++ (Qt)
1
file.open(QIODevice::ReadOnly | QIODevice::Text);
Тут перечисляются 2 флага
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
29.07.2014, 11:52     Как реализовать флаги в параметрах функции #6
Цитата Сообщение от Igor Fender Посмотреть сообщение
Тут перечисляются 2 флага
они не перечисляются они логически суммируются
например
C++
1
2
3
QIODevice::ReadOnly = 0000 0001
QIODevice::Text = 0000 0100
QIODevice::ReadOnly | QIODevice::Text = 0000 0101
а потом флаг парсится(внутри ф-ции open )
обчно примерно так
C++
1
2
3
4
if(flag & QIODevice::ReadOnly)//проверка выставлен ли флаг
{
//какие то действия
}
Igor Fender
1 / 1 / 0
Регистрация: 09.07.2014
Сообщений: 167
29.07.2014, 11:55  [ТС]     Как реализовать флаги в параметрах функции #7
Я не могу понять откуда переменная flag :

C++
1
2
3
4
if(flag & QIODevice::ReadOnly)//проверка выставлен ли флаг
{
//какие то действия
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.07.2014, 11:59     Как реализовать флаги в параметрах функции
Еще ссылки по теме:

C++ Таблица в параметрах функции
C++ Ошибка компиляции при неправильных входных параметрах функции
C++ Ключевое слово class в параметрах функции

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

Или воспользуйтесь поиском по форуму:
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
29.07.2014, 11:59     Как реализовать флаги в параметрах функции #8
Сообщение было отмечено автором темы, экспертом или модератором как ответ
таки прототип
C++
1
ostream::open(char* name, int flag)
например(это не точно, это для примера)

Добавлено через 51 секунду
Вы в Qt найдате объявление или реализацию метода open и поймете

Добавлено через 2 минуты
вот из std либы
C++
1
2
3
_Myt *open(const char *_Filename,
        ios_base::openmode _Mode,//вот флаг, ну вот тут mode называется - одно и то же
        int _Prot = (int)ios_base::_Openprot)
Yandex
Объявления
29.07.2014, 11:59     Как реализовать флаги в параметрах функции
Ответ Создать тему
Опции темы

Текущее время: 15:42. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru