Как использовать перечисления в качестве флагов в C++?



лечения enumS Как флаги прекрасно работает в C# через [Flags] атрибут, но каков наилучший способ сделать это в C++?



например, я хотел бы написать:



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.

577   0  

Comments

    Ничего не найдено.