From: Peter Dimov (pdimov_at_[hidden])
Date: 2024-09-30 17:32:30


Andrzej Krzemienski wrote:
> Hi Everyone,
> I would like to check if something like the following would be a useful addition
> to Boost.Core, or if something like this maybe exists:
>
> I have a class like
> ```
> struct X
> {
> std::string str;
> explicit X(const std::string& s) : str(s) {} }; ```
>
> I need to transform a vector of strings into a vector of X through invoking the
> constructor of X:
>
> ```
> std::vector<std::string> strings = {"cat", "dog", "emu", "fox"}; std::vector<X>
> xs;
>
> std::transform(strings.begin(), strings.end(), std::back_inserter(xs),[](auto
> const& s) {
> return X(s);
> }));
> ```
>
> It works, but a shorter version would be to introduce a component that is
> equivalent to the lambda:
>
> ```
> std::transform(strings.begin(), strings.end(), std::back_inserter(xs),
> construct<X>)); ```

This exists at least four times in Boost (in Lambda, Hof, Phoenix,
Functional/Factory), probably more that I haven't thought of.

But it's not in Core (or in Bind). (Not in Lambda2 either despite
https://github.com/boostorg/lambda2/issues/6)

We try to not make Core the repository of every useful thing someone
thinks of; this role was served by Utility in the past, or Functional for
function objects, but these multiple unrelated component repositories
never work out that well.