Date: Sun, 01 Dec 2024 19:11:47 +0300
On December 1, 2024 6:57:16 PM Avi Kivity via Std-Proposals
<std-proposals_at_[hidden]> wrote:
> Functions and member functions are invocable, but constructors are not.
>
> I propose to add
>
> template <typename T, typename... Args>
> T std::construct(Args&&... args) {
> return T(std::forward<decltype(Args)>(args)...);
> }
>
> With this, we can pass a constructor where other functions can be
> passed.
>
> // build a callback that creates and returns a Type1 thing
> std::function<Type1 (Arg3)> make_somthing =
> std::bind_front(std::construct<Type1>, arg1, std::ref(arg2));
>
> // transform a vector of ints to a vector of some other type
> auto foo = some_container |
> std::views::transform(std::construct<AnotherType>) |
> std::ranges::to<std::vector>();
Binding a function pointer is less efficient than a function object. And
given that lambdas are an easy way to create function objects, I don't
really see the benefits of the proposal.
<std-proposals_at_[hidden]> wrote:
> Functions and member functions are invocable, but constructors are not.
>
> I propose to add
>
> template <typename T, typename... Args>
> T std::construct(Args&&... args) {
> return T(std::forward<decltype(Args)>(args)...);
> }
>
> With this, we can pass a constructor where other functions can be
> passed.
>
> // build a callback that creates and returns a Type1 thing
> std::function<Type1 (Arg3)> make_somthing =
> std::bind_front(std::construct<Type1>, arg1, std::ref(arg2));
>
> // transform a vector of ints to a vector of some other type
> auto foo = some_container |
> std::views::transform(std::construct<AnotherType>) |
> std::ranges::to<std::vector>();
Binding a function pointer is less efficient than a function object. And
given that lambdas are an easy way to create function objects, I don't
really see the benefits of the proposal.
Received on 2024-12-01 16:11:50