Open apolukhin opened 3 years ago
yndx-antoshkka, 2 августа 2017, 15:29 Отличная идея! Желающие заняться ей - пишите, тут надо будет прежде всего обсудить с автором библиотеки https://github.com/boostorg/callable_traits , у него уже есть предложенные вами вещи http://boostorg.github.io/callable_traits/doc/html/index.html
Antervis, 7 августа 2017, 6:01 yndx-antoshkka, получается, надо реализовать conversion functions, попробовать просунуть их в буст, а там как пойдет?
yndx-antoshkka, 7 августа 2017, 18:11 Antervis, Библиотека https://github.com/boostorg/callable_traits уже почти принята в Boost и её хотят перетащить в стандарт С++.
Начать стоит с того, что убедиться что всё необходимое есть в этой библиотеке http://boostorg.github.io/callable_traits/doc/html/index.html
Если чего-то не хватает - попробовать добавить через pull request Если уже всё необходимое есть - либо маякнуть чтобы я познакомил вас с разработчиком библиотеки, либо самому связаться с автором библиотеки и предложить ему свою помощь с продвижением в стандарт.
Antervis, 8 августа 2017, 5:48 yndx-antoshkka, в этой библиотеке есть преобразования типов, но отсутствуют функции преобразования самих callable объектов
Перенос предложения: голоса +5, -0 Автор идеи: Antervis
Добавить type_traits и функции для преобразования noexcept'ness Callable объектов и их типов
В с++17 noexcept - часть типа Callable объекта. Соответственно, возможны ошибки компиляции или более медленные fallback'и (например, в STL) если в функцию, требующую Res(Args...)noexcept пытаться передать Res(Args...). Предлагаю добавить:
type_traits:
conversion functions:
constexpr /implementation-defined/ all_overloads = /implementation-defined/; - флаг для указания в качестве шаблонных параметров вышеназванных функций, см. ниже* Для объектов без перегруженного operator(), дополнительные шаблонные параметры указывать не нужно. Иначе, необходимо:
либо указать ...Args, с которыми вызывается operator(Args...), и результатом будет объект/тип объекта, одна из перегрузок operator() которого поменяет noexcept'ness
либо передать в шаблон all_overloads - вернет объект/тип объекта, все перегрузки operator() которого поменяют noexcept'ness
Вроде как всё это реализуемо в рамках c++17. Разве что all_overloads версии через шаблонную рекурсию