Сообщение Re[6]: Можно ли записать читабельнее? от 10.04.2023 15:08
Изменено 10.04.2023 15:17 rg45
Re[6]: Можно ли записать читабельнее?
Здравствуйте, Кодт, Вы писали:
К>Так, хорош. Мы щас допилим до продакшена и будем постить в буст или сразу в комитет?
Ну, я уже разогнался, уже легче доехать, чем затормозить
Посмотри, как тебе такой вариант:
http://coliru.stacked-crooked.com/a/718c8e8af7cf764e
overloaded — даже не класс, а простейший шаблон функции!
Единственное отличие — не возникает ошибки компиляции в случае отсутствия обработчика, вместо этого возвращается false, что означает, что запрос не был обработан. Таким образом, и пустые цепочки обработчиков тоже возможны. В остальном результат в точности как у тебя.
К>Так, хорош. Мы щас допилим до продакшена и будем постить в буст или сразу в комитет?
Ну, я уже разогнался, уже легче доехать, чем затормозить
Посмотри, как тебе такой вариант:
http://coliru.stacked-crooked.com/a/718c8e8af7cf764e
template <typename T> concept available = std::is_same_v<T, T>;
template <typename F>
struct callable_wrapper
{
F f;
template <typename...X>
bool operator()(X&&...x) const requires available<decltype(f(std::forward<X>(x)...))> {
f(std::forward<X>(x)...); return true;
}
template <typename...X>
bool operator()(X&&...) const { return false; }
};
template <typename...F>
auto overloaded(F&&...f)
{
return [=](auto&&...x) { return (callable_wrapper<F>{f}(x...) || ...); };
}
Use case | |
| |
overloaded — даже не класс, а простейший шаблон функции!
Единственное отличие — не возникает ошибки компиляции в случае отсутствия обработчика, вместо этого возвращается false, что означает, что запрос не был обработан. Таким образом, и пустые цепочки обработчиков тоже возможны. В остальном результат в точности как у тебя.
Re[6]: Можно ли записать читабельнее?
Здравствуйте, Кодт, Вы писали:
К>Так, хорош. Мы щас допилим до продакшена и будем постить в буст или сразу в комитет?
Ну, я уже разогнался, уже легче доехать, чем затормозить
Посмотри, как тебе такой вариант:
http://coliru.stacked-crooked.com/a/718c8e8af7cf764e
overloaded — даже не класс, а простейший шаблон функции!
Единственное отличие — не возникает ошибки компиляции в случае отсутствия обработчика. Вместо этого возвращается false, что означает, что запрос не был обработан. Таким образом, и пустые цепочки обработчиков тоже возможны. В остальном результат в точности как у тебя.
К>Так, хорош. Мы щас допилим до продакшена и будем постить в буст или сразу в комитет?
Ну, я уже разогнался, уже легче доехать, чем затормозить
Посмотри, как тебе такой вариант:
http://coliru.stacked-crooked.com/a/718c8e8af7cf764e
template <typename T> concept available = std::is_same_v<T, T>;
template <typename F>
struct callable_wrapper
{
F f;
template <typename...X>
bool operator()(X&&...x) const requires available<decltype(f(std::forward<X>(x)...))> {
f(std::forward<X>(x)...); return true;
}
template <typename...X>
bool operator()(X&&...) const { return false; }
};
template <typename...F>
auto overloaded(F&&...f)
{
return [=](auto&&...x) { return (callable_wrapper<F>{f}(x...) || ...); };
}
Use case | |
| |
overloaded — даже не класс, а простейший шаблон функции!
Единственное отличие — не возникает ошибки компиляции в случае отсутствия обработчика. Вместо этого возвращается false, что означает, что запрос не был обработан. Таким образом, и пустые цепочки обработчиков тоже возможны. В остальном результат в точности как у тебя.