如果源类型和目标类型之间需要显式类型转换,如何使用 std::copy

P45*_*ent 7 c++

考虑

struct foo{};

struct bar{
    bar(const foo& f){}
};
Run Code Online (Sandbox Code Playgroud)

想象我有一个

std::vector<foo> vec;
Run Code Online (Sandbox Code Playgroud)

我想将其转换为std::vector<bar> out. 我可以用

std::copy(vec.begin(), vec.end(), std::back_inserter(out));
Run Code Online (Sandbox Code Playgroud)

这样做既然bar不是explicit。然而,我必须bar如此explicit!但随后就back_inserter不再起作用了。我需要对参数进行哪些更改才能std::copy以某种方式包含显式内容bar(<iteratee>)

Bat*_*eba 12

std::transform(
    vec.begin(),
    vec.end(),
    std::back_inserter(out),
    [](const foo& f){
        return bar(f);
    }
);
Run Code Online (Sandbox Code Playgroud)

会做的。