Кресты / Говнокод #27781 0 12345678910111213141516171819202122232425262728293031323334353637383940414243444546 uint16_t Mnemonic::describeMnemonics(void) const { uint16_t result = 0; size_t i = 0; for (auto&& m : mnemonics) result += m.index() << i++ * 4; return result; } ... switch(mnemonic.describeMnemonics()) { case constructDescription(REGISTER, REGISTER): { ... } break; case constructDescription(REGISTER, CONSTANT): { ... } break; case constructDescription(REGISTER, LABEL): { ... } break; case constructDescription(REGISTER, INDIRECT_ADDRESS): { ... } break; case constructDescription(INDIRECT_ADDRESS, REGISTER): { ... } break; default: break; } спасибо папочка за паттерн матчинг Запостил: digitalEugene, 01.11.2021 (Updated 01.11.2021) Комментарии (9) RSS digitalEugene 2 года ago # 0 template<typename... Args> constexpr uint16_t constructDescription(Args... args) { uint16_t result = 0; size_t i = 0; for(auto&& c : {args...}) result += c << i++ * 4; return result; } Ответить digitalEugene 2 года ago # 0 ⇈ кстати std::accumulate умеет в constexpr? хочу тянсверточку Ответить ISO 2 года ago # 0 ⇈ Начиная с «C++20». https://en.cppreference.com/w/cpp/algorithm/accumulate Ответить digitalEugene 2 года ago # 0 ⇈ заебись. Ответить digitalEugene 2 года ago # 0 ⇈ Modern C++ template<typename... Args> constexpr uint16_t constructDescription(Args... args) { size_t i = 0; auto&& r = { args... }; return std::accumulate(r.begin(), r.end(), static_cast<uint16_t>(0), [&i]<typename T0>(T0 a, auto b) -> T0 { return std::move(a) + static_cast<uint16_t>(b << i++ * 4); }); } Ответить ISO 2 года ago # 0 > uint16_t Чтобы компилятор в OOM не выпал? Ответить digitalEugene 2 года ago # 0 ⇈ разучился ставить int, short, long, теперь всё int32_t, int16_t, int64_t... не знаю к какому врачу идти Ответить guest 2 года ago # 0 ⇈ К с89 Ответить bormand 2 года ago # 0 ⇈ Затайпдефит сам. Ответить Добавить комментарий Отменить ответ Где здесь C++, guest?! А не использовать ли нам bbcode? [b]жирный[/b] — жирный [i]курсив[/i] — курсив [u]подчеркнутый[/u] — подчеркнутый [s]перечеркнутый[/s] — перечеркнутый [blink]мигающий[/blink] — мигающий [color=red]цвет[/color] — цвет (подробнее) [size=20]размер[/size] — размер (подробнее) [code=<language>]some code[/code] (подробнее)
digitalEugene 2 года ago # 0 template<typename... Args> constexpr uint16_t constructDescription(Args... args) { uint16_t result = 0; size_t i = 0; for(auto&& c : {args...}) result += c << i++ * 4; return result; } Ответить
ISO 2 года ago # 0 ⇈ Начиная с «C++20». https://en.cppreference.com/w/cpp/algorithm/accumulate Ответить
digitalEugene 2 года ago # 0 ⇈ Modern C++ template<typename... Args> constexpr uint16_t constructDescription(Args... args) { size_t i = 0; auto&& r = { args... }; return std::accumulate(r.begin(), r.end(), static_cast<uint16_t>(0), [&i]<typename T0>(T0 a, auto b) -> T0 { return std::move(a) + static_cast<uint16_t>(b << i++ * 4); }); } Ответить
digitalEugene 2 года ago # 0 ⇈ разучился ставить int, short, long, теперь всё int32_t, int16_t, int64_t... не знаю к какому врачу идти Ответить
digitalEugene # 0
digitalEugene # 0 ⇈
ISO # 0 ⇈
https://en.cppreference.com/w/cpp/algorithm/accumulate
digitalEugene # 0 ⇈
digitalEugene # 0 ⇈
ISO # 0
Чтобы компилятор в OOM не выпал?
digitalEugene # 0 ⇈
не знаю к какому врачу идти
guest # 0 ⇈
bormand # 0 ⇈