我正在编写一个小助手类来帮助设置基于位掩码的位标志。但是,我在使用操作符重载设计一个好的、清晰的语法时遇到了一些困难。为了说明,一些可能的想法如下所示(bit名称空间和‘掩码’类是我的):
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..发布于 2018-10-12 13:52:03
目前,我的结果是介于两者之间,我认为它提供了足够的“语法”,同时也支持灵活的构建块,并避免了单一函数的缺陷。
bit::flags_ref( flags ).with_mask( mask ) = updateVal;https://stackoverflow.com/questions/52776625
复制相似问题