Я пишу небольшой вспомогательный класс, чтобы помочь с настройкой битовых флагов на основе битовой маски.Но у меня возникли некоторые проблемы при разработке хорошего и понятного синтаксиса с использованием перегрузки операторов.Чтобы проиллюстрировать это, некоторые возможные идеи выглядят примерно так: (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..