Сообщение Re: Вот еще бесит отсутствие флагового типа от 05.10.2022 17:57
Изменено 05.10.2022 23:04 andrey.desman
Re: Вот еще бесит отсутствие флагового типа
Здравствуйте, Marty, Вы писали:
M>А как вы решаете флаговою проблему?
Примерно так:
Можно переделать под порядковый (0, 1, 2, 3, ...) энум. Можно под большой статический, а можно под динамический (на базе boost::dynamic_bitset, например).
Средства есть. Зачем их в язык тянуть?
M>А как вы решаете флаговою проблему?
Примерно так:
flags.h | |
| |
#include "flags.h"
#include <cassert>
enum class Fruit
{
Apple = 0b0001,
Orange = 0b0010,
Kiwi = 0b0100,
Pear = 0b1000,
};
using FruitFlags = Flags<Fruit>;
int main()
{
FruitFlags kompot = {Fruit::Apple, Fruit:: Pear};
assert(kompot & Fruit::Apple);
assert(Fruit::Orange & (kompot | Fruit::Orange));
assert(kompot.none(Fruit::Kiwi, Fruit::Orange));
assert(kompot.all(Fruit::Apple, Fruit::Pear));
assert(kompot == FruitFlags(Fruit::Apple, Fruit::Pear));
kompot |= Fruit::Orange;
assert(kompot & Fruit::Orange);
kompot &= Fruit::Apple;
kompot = Fruit::Apple & kompot;
assert(kompot.any(Fruit::Apple, Fruit::Kiwi, Fruit::Orange));
assert(kompot.all(Fruit::Apple));
assert(kompot.none(Fruit::Kiwi, Fruit::Orange, Fruit::Pear));
kompot.set(Fruit::Kiwi, Fruit::Orange, Fruit::Pear).reset(Fruit::Apple);
assert(kompot.all(Fruit::Kiwi, Fruit::Orange, Fruit::Pear));
assert(kompot.none(Fruit::Apple));
return 0;
}
Можно переделать под порядковый (0, 1, 2, 3, ...) энум. Можно под большой статический, а можно под динамический (на базе boost::dynamic_bitset, например).
Средства есть. Зачем их в язык тянуть?
Re: Вот еще бесит отсутствие флагового типа
Здравствуйте, Marty, Вы писали:
M>А как вы решаете флаговою проблему?
Примерно так:
Можно переделать под порядковый (0, 1, 2, 3, ...) энум. Можно под большой статический, а можно под динамический (на базе boost::dynamic_bitset, например).
Средства есть. Зачем их в язык тянуть?
M>А как вы решаете флаговою проблему?
Примерно так:
flags.h | |
| |
#include "flags.h"
#include <cassert>
enum class Fruit
{
Apple = 0b0001,
Orange = 0b0010,
Kiwi = 0b0100,
Pear = 0b1000,
};
using FruitFlags = Flags<Fruit>;
int main()
{
FruitFlags kompot = {Fruit::Apple, Fruit:: Pear};
assert(kompot & Fruit::Apple);
assert(Fruit::Orange & (kompot | Fruit::Orange));
assert(kompot.none(Fruit::Kiwi, Fruit::Orange));
assert(kompot.all(Fruit::Apple, Fruit::Pear));
assert(kompot == FruitFlags(Fruit::Apple, Fruit::Pear));
kompot |= Fruit::Orange;
assert(kompot & Fruit::Orange);
kompot &= Fruit::Apple;
kompot = Fruit::Apple & kompot;
assert(kompot.any(Fruit::Apple, Fruit::Kiwi, Fruit::Orange));
assert(kompot.all(Fruit::Apple));
assert(kompot.none(Fruit::Kiwi, Fruit::Orange, Fruit::Pear));
kompot.set(Fruit::Kiwi, Fruit::Orange, Fruit::Pear).reset(Fruit::Apple);
assert(kompot.all(Fruit::Kiwi, Fruit::Orange, Fruit::Pear));
assert(kompot.none(Fruit::Apple));
return 0;
}
Можно переделать под порядковый (0, 1, 2, 3, ...) энум. Можно под большой статический, а можно под динамический (на базе boost::dynamic_bitset, например).
Средства есть. Зачем их в язык тянуть?