C ++ 20 и более новее - Как лучше всего реализовать «перечисление с большей функциональностью»?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 C ++ 20 и более новее - Как лучше всего реализовать «перечисление с большей функциональностью»?

Сообщение Anonymous »

Я видел результаты потоков на протяжении многих лет о том, как вы могли бы обернуть перечисление или шаблон класса с перечислением, чтобы добавить функциональность добавления. У меня есть перечисление. Я хочу иметь возможность создать объект класса вокруг класса Enum, чтобы я мог < /p>

конвертировать в строку < /li>
Входное значение конкретное информация < /li>
< /ul>
Простой способ сделать это < /p>
< /ul>
Простой способ сделать < /p>
< /ul>
< /p>
< /ul>
< /p> < /br /> < /ul>
.
enum class color : uint16_t {
unknown = 0,
red,
green,
blue,
};

class colorClass {
public:
colorClass(){ val = color::unknown; }
colorClass(color v)
:val(v)
{}

//copy, move, assignment ctors section

bool isRed(){ return val == color::red; }
// more such functions

std::string toString() {
using enum color;
switch (val) {
case red : return "red";
case blue: return "blue";
case green: return "green";
case unknown: [[fallthrough]];
default: return "unknown";
}
}

private:
color val;
};

< /code>
Это работает просто отлично. Теперь, если я хочу ограничить этот класс еще немного, я могу использовать шаблон и концепции < /p>
enum class color : uint16_t {
unknown = 0
red,
green,
blue,
};

template
concept ValidColor = std::is_enum_v;

template
class colorClass {
// Pretty much the same implementation?
};
< /code>
Моя память немного нечеткая, но я думаю, что я видел некоторые умные реализации для ToString, используя базовый тип. Я не хочу использовать каких -либо сторонних либеров. Помимо обеспечения использования перевода, придает ли добавление шаблона какие -либо преимущества?>

Подробнее здесь: https://stackoverflow.com/questions/786 ... functional
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»