Я писал простой класс cFlags, который предназначен для хранения логических флагов в отдельных переменных, в отличие от создания нескольких bools (каждый из которых занимает один байт памяти).Все работает хорошо, но я столкнулся с этой проблемой, пытаясь упростить установку значений флагов.Пропуская ненужные части, мой код выглядит следующим образом:
template <typename T>
cFlags
{
public:
bool get(char flag);
void set(char flag, bool value);
private:
T flags_;
};
Созданный класс содержит переменную-член типа шаблона и позволяет управлять своими битами с помощью методов set () и get () (аргументы char соответствуют конкретнымбиты в элементе flags_).
Теперь у меня возникла идея, что я должен сделать перегрузку оператора [], чтобы упростить установку и получение значений флага.Проблема в том, что я не смог найти способ сделать такие вещи, как
cFlags<char> flags;
flags[0] = true;
возможными, так как перегрузка оператора [] возвращает только логическое значение r, которое соответствует тому, горит ли бит или нет.Как мне реализовать такую функциональность, которую я могу сделать, например, примерно так:
cFlags<char> flags;
flags[0] = true;
if (flags[0]) {
std::cout << "Bit 0 is active!";
}