Devo usar #define, enum ou const?
Em um projeto C ++ em que estou trabalhando, tenho umbandeira tipo de valor que pode ter quatro valores. Essas quatro bandeiras podem ser combinadas. Sinalizadores descrevem os registros no banco de dados e podem ser:
novo recorderegistro excluídoregistro modificadoregistro existenteAgora, para cada registro eu desejo manter este atributo, então eu poderia usar um enum:
enum { xNew, xDeleted, xModified, xExisting }
No entanto, em outros lugares no código, preciso selecionar quais registros devem ficar visíveis para o usuário, então gostaria de poder passar isso como um único parâmetro, como:
showRecords(xNew | xDeleted);
Então, parece que eu tenho três possíveis abortos:
#define X_NEW 0x01
#define X_DELETED 0x02
#define X_MODIFIED 0x04
#define X_EXISTING 0x08
ou
typedef enum { xNew = 1, xDeleted, xModified = 4, xExisting = 8 } RecordType;
ou
namespace RecordType {
static const uint8 xNew = 1;
static const uint8 xDeleted = 2;
static const uint8 xModified = 4;
static const uint8 xExisting = 8;
}
Os requisitos de espaço são importantes (byte vs int), mas não são cruciais. Com define eu perco a segurança do tipo, e comenum
Eu perco algum espaço (inteiros) e provavelmente tenho que converter quando quero fazer uma operação bit a bit. Comconst
Eu acho que também perco tipo de segurança desde um aleatóriouint8
poderia entrar por engano.
Existe alguma outra maneira mais limpa?
Se não, o que você usaria e por quê?
P.S. O resto do código é bastante limpo e moderno C + + sem#define
s, e eu usei namespaces e templates em poucos espaços, então eles também não estão fora de questão.