- 新记录
- 已删除的记录
- 修改过的记录
- 现有记录
enum { xNew, xDeleted, xModified, xExisting }
然而,在代码的其他地方,我需要选择哪些记录可见给用户,因此我希望能够将其作为单个参数传递,如:
但是,在代码的其他地方,我需要选择哪些记录可见给用户,因此我希望能够将其作为单个参数传递,例如:
showRecords(xNew | xDeleted);
所以,看起来我有三种可能的方法:
#define X_NEW 0x01
#define X_DELETED 0x02
#define X_MODIFIED 0x04
#define X_EXISTING 0x08
或typedef enum { xNew = 1, xDeleted, xModified = 4, xExisting = 8 } RecordType;
或者namespace RecordType {
static const uint8 xNew = 1;
static const uint8 xDeleted = 2;
static const uint8 xModified = 4;
static const uint8 xExisting = 8;
}
空间要求很重要(字节 vs 整型),但不是至关重要的。使用定义会失去类型安全,使用枚举
会失去一些空间(整数)并且可能需要进行位运算时强制转换。使用const
也可能会失去类型安全,因为一个随意的uint8
可能会出错。
是否有其他更简洁的方法?
如果没有,你会使用什么方法以及为什么?
P.S. 其余代码都是相当干净的现代C++,没有#define
,我在一些地方使用了命名空间和模板,所以它们也不是不可能的选择。
enum RecordType : uint8_t
结合了enum
的类型安全性和uint8_t
的小尺寸,尽管您仍需要提供位运算符。 - Justin Time - Reinstate Monica