使用场景
位标记的使用场景很多,主要是用来标记一个变量有没有值。比如在两个对象之间做merge操作的时候,需要知道被merge对象的哪些属性(即对象的property)是否有值,这样才能做到有效的merge。
我们熟悉的JSON转model的第三方库Mantle,它的实现里就有对象的merge,但需要指定merge哪些属性,使用起来比较麻烦,要是借助位标记的话,Mantle的merge就会更加方便,代码也会更简洁。
实现思路
通常位标记会使用long型或long long型来扩展支持,但有时候需要标记的变量个数比较少的话,这样做比较浪费。而在c语言里,char型或8位int型相对long型来说能更好的节省内存空间,所以位标记的实现会依赖char型或8位int型数据类型来实现,下文使用的是8位int型。
如果位标记用来标记一个对象的属性赋值的变化,每个对象的属性个数是不定的,所以位标记实现还应该是动态可变的。
代码实现
|
|