Многозначное перечисление DWORD в качестве одного аргумента функции Переполнение стека

Я не могу заставить это работать. Я хочу включить два значения в первое пятно func arg (Color и Black).

Он отлично работает с одним аргументом в arg1:
func(arg_a::Color, 5);

Я попытался следующие варианты в arg1 безуспешно:

arg_a::Color || Black
arg_a::Color && Black
(arg_a::Color, arg_a::Black)
DWORD test = arg_a::Color&&Black;

Документация у меня есть ниже:
arg_a
Тип: DWORD

Arg_a может принимать одно или несколько из следующих значений:
цвет
белый
черный

0

Решение

Чтобы закодировать два «перечислимых значения» в одно, вы обычно используете один бит для каждого значения:

enum {
Black = 0x01;
White = 0x02;
Color = 0x04;
}

Затем вы можете объединить их с побитовыми операторами:

call(Black|White);
// or perhaps easier to read
call(Black + White);

На приемном конце

call(int val) {
if (val & Black) { ... }
if (val & White) { ... }

Обратите внимание, что это только псевдокод.

2

Другие решения

попробуйте DWORD (arg_a :: Black, arg_a :: Color) // предопределенный макрос
или (arg_a :: Black | arg_a :: Color) // поразрядно или

Вы используете логические операторы, но для этого вам нужны побитовые операции.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector