ideas
ideas copied to clipboard
Добавить полезную вещь энумератам.
Сделать enum чуть полезнее, чтобы можно было спокойно получать значение, зная какое значение имеет энумерат.
Данная вещь будет полезна при создании обработчика событий браузера, написании игровых движков и там, где нужно зная какое значение имеет энумерат, получить значение.
Как в Rust'е на данный момент:
enum DayTime{
Morning(String),
Evening(String)
}
fn main(){
//получили откуда-то значение var
match var {
Morning(a) => {/* что-то */},
Evening(b) => {/* что-то */}
}
}
Как это выглядело бы в C++:
struct Data{
enum class Types{
WebErrorCode,
LoadedTime
};
Types t;
std::variant<int,float> values;
};
int main() {
//взяли откуда-то экземпляр типа `Data`
if (d.t == Data::Types::WebErrorCode){
//Тут дальше что-то делаете со значениями
}
}
Как хотелось бы в C++:
enum Data{
WebErrorCode(int),
LoadedTime(float)
};
int main(){
//откуда-то получили данные
if (D == Data::WebErrorCode){
int res = std::get<Data::WebErrorCode>(D); //Если попробовать получить Data::LoadedTime, то кидало бы ошибку компиляции.
//Дальше что-то делаете с этим.
}
}
Также можно расширить switch, которым никто особо не пользуется, до match как в первом примере.
А чем не подходит или не удобен std::visit?
Он тоже подходит, но так выглядело бы лаконично. К тому же хороший сахар.