в плюсах (или можно вообще так)?
а какую функцию?
std::function<int(…)> func() {}
Можно, от функции зависит как лучше это сделать (std::function может быть оверкиллом, но как универсальный вариант пойдет)
лямбадку
using funcType = int(*)(int); typedef int(*funcType)(int); ещё такой вариант нашёл. std::function обёртка как понял и наверно в обычных случаях лучше использовать тайпалиасы?
Мне больше нравится запись using FuncType = std::add_pointer_t<int(int)>; Вместо классической. Сигнатуру гораздо лучше видно В случае возврата указателей на свободные функции std::function в общем-то и не нужен, можно ограничиться голыми указателями
Вообще, при возврате чего-то конкретного, лучше писать auto (или на худой конец концепт), чтобы не привязываться к тому, указатель это или что-то стейтфул. std::invocable<int> auto foo() { return [](int i) {}; } (на этом моменте можно начать грустить, что std::invocable не смотрит на возвращаемый тип)
Дождаться бы еще концептов в продакшн-коде...
Ну, да. Это скорее теоретические рассуждения
А есть invocable с учетом возвращаемого типа? regular_invocable я так понимаю это про другое
regular_invocable - синоним invocable с точки зрения реализации. У них отличия на идейном уровне и компилятором не проверяются. invocable с возвращаемым типом нет, но я предполагаю, что для гипотетического invocable_r<Ret, Args...> не ясно, это same_as<Ret, T> или convertible_to<Ret, T> (как и в requires нельзя написать { f() } -> Ret)
Обсуждают сегодня