Рассмотрение enum
, поскольку флаги прекрасно работают на С# с помощью атрибута [Flags]
, но что лучший способ сделать это на С++?
Например, я бы хотел написать:
enum AnimalFlags
{
HasClaws = 1,
CanFly =2,
EatsFish = 4,
Endangered = 8
};
seahawk.flags = CanFly | EatsFish | Endangered;
Однако я получаю ошибки компилятора в отношении преобразований int
/enum
. Есть ли лучший способ выразить это, чем просто тупое литье? Предпочтительно, я не хочу полагаться на конструкции из сторонних библиотек, таких как boost или Qt.
EDIT: Как указано в ответах, я могу избежать ошибки компилятора, объявив seahawk.flags
как int
. Тем не менее, я хотел бы иметь некоторый механизм для обеспечения безопасности типов, поэтому кто-то не может писать seahawk.flags = HasMaximizeButton
.