位掩码助手和运算符重载语法设计

时间:2018-10-12 09:36:52

标签: c++ operator-overloading

我正在编写一个小的帮助程序类,以帮助基于位掩码设置位标志。但是我在使用运算符重载来设计良好清晰的语法时遇到了一些麻烦。为了说明这一点,一些可能的想法类似于以下内容(bit名称空间和'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 :(得分:0)

现在,我最终介于两者之间,我认为它提供了足够的“语法”,同时还支持灵活的构建基块并避免了裸函数的陷阱。

bit::flags_ref( flags ).with_mask( mask ) = updateVal;