Я видел результаты потоков на протяжении многих лет о том, как вы могли бы обернуть перечисление или шаблон класса с перечислением, чтобы добавить функциональность добавления. У меня есть перечисление. Я хочу иметь возможность создать объект класса вокруг класса 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