overloaded — даже не класс, а простейший шаблон функции!
Единственное отличие — не возникает ошибки компиляции в случае отсутствия обработчика. Вместо этого возвращается false, что означает, что запрос не был обработан. Таким образом, и пустые цепочки обработчиков тоже возможны. В остальном результат в точности как у тебя.
--
Справедливость выше закона. А человечность выше справедливости.
R>Единственное отличие — не возникает ошибки компиляции в случае отсутствия обработчика. Вместо этого возвращается false, что означает, что запрос не был обработан. Таким образом, и пустые цепочки обработчиков тоже возможны. В остальном результат в точности как у тебя.
Хотя для того, чтобы вместо кода результата false получить ошибку компиляции, достаточно просто использовать констрейнт внутри функции overloaded. Следующий пример дает В ТОЧНОСТИ тот же эффект, что и твой:
Здравствуйте, rg45, Вы писали:
К>>Так, хорош. Мы щас допилим до продакшена и будем постить в буст или сразу в комитет?
R>Ну, я уже разогнался, уже легче доехать, чем затормозить
R>Посмотри, как тебе такой вариант:
Твой вариант имеет недостатки:
1) Инстанцируются все перегрузки, которые подошли по формальному признаку "сигнатура well-formed"
Например, функция-заглушка может выглядеть вот так
Или, например, лесенка перегрузок может быть вот такой
[](Foo x, auto y) { ... },
[](Bar x, auto y) { ... }
[](auto x, Buz y) {
// мы тут уверены, что x - ни Foo, ни Barusing X = decltype((x));
static_assert(!is_same_v<X,Foo> && !is_same_v<X,Bar>); // ну или ещё что-то, что ломает компиляцию
},
[](auto x, auto y) { ... }
2) Он жёстко приколочен к тому, что перегрузки возвращают void. Поэтому можно спокойно налепить bool поверх void.
Попробуй возвращать что-нибудь содержательное. Причём, возможно, для разных перегрузок — разное.
Здравствуйте, Кодт, Вы писали:
К>1) Инстанцируются все перегрузки, которые подошли по формальному признаку "сигнатура well-formed"
Согласен, это существенный недостаток.
К>2) Он жёстко приколочен к тому, что перегрузки возвращают void. Поэтому можно спокойно налепить bool поверх void.
Ну, в принципе, реализация не накладывает никаких ограничений на тип результата, он может быть каким угодно. Но результат теряется в моей реализации, это правда.
--
Справедливость выше закона. А человечность выше справедливости.