Разработка синтаксиса битовой маски и оператора с перегрузкой - PullRequest
0 голосов
/ 12 октября 2018

Я пишу небольшой вспомогательный класс, чтобы помочь с настройкой битовых флагов на основе битовой маски.Но у меня возникли некоторые проблемы при разработке хорошего и понятного синтаксиса с использованием перегрузки операторов.Чтобы проиллюстрировать это, некоторые возможные идеи выглядят примерно так: (bit namespace и класс 'mask' мои):

unsigned int flags = 0x01011001;
unsigned int mask  = 0x00001001;
const bool updateVal = getNewValFromElsewhere();

1) (использование reference для флагов и соответствующее обновление)

flags & bit::mask(mask) = updateVal ; //i sort of like this one
bit::mask(mask) & flags = updateVal ; //but what is this supposed to mean then ?

или

2) также может быть передано по значению вместо ссылки

flags = flags & mask = updateVal ; //looks cryptic to me
flags &= mask = updateVal; //still somewhat cryptic

Как вы можете видеть, оно просто не кажется интуитивным и лаконичным.Мне нужна помощь в разработке синтаксиса, а не в реальной реализации (но в рамках c ++).operator&, используемый с флагами, не является для меня самой большой проблемой и может быть заменен любым оператором для запуска пользовательского поведения, но поможет ли это много?Должен ли я отбросить всю идею перегрузки операторов для этого вспомогательного класса?(почему?)

3) Пример без перегрузки операторов

bit::mask_flags(flags, mask).set(updateVal);//doesn't feel so good
bit::bitflags(flags).set_using_mask(mask, updateVal)//maybe better, but then what with other operations than setting..

1 Ответ

0 голосов
/ 12 октября 2018

Пока что я оказался где-то посередине, и я думаю, что он обеспечивает достаточно «синтаксиса», а также поддерживает гибкие строительные блоки и избегает ловушек голой функции.

bit::flags_ref( flags ).with_mask( mask ) = updateVal;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...