gpt4 book ai didi

c++ - 使用 ranges-v3 连接不同类型

转载 作者:行者123 更新时间:2023-12-05 09:01:41 25 4
gpt4 key购买 nike

我想知道是否可以连接两个包含不同类型对象的 vector ,这样我就可以迭代连接并调用公共(public)接口(interface)。

像这样:

    std::vector<A> as;
as.resize(3);

std::vector<B> bs;
bs.resize(4);

for (const auto &v : ranges::views::concat(as, bs))
{
foo(v);
}

你可以在这里找到一个完整的例子 https://godbolt.org/z/nr5hhWMxj

最佳答案

您可以使用 views::transform 将两个容器的元素转换为 std::variant 以进行类型删除。

auto to_variant = ranges::views::transform(
[](auto x) { return std::variant<A, B>(std::move(x)); });
for (const auto& v : ranges::views::concat(as | to_variant, bs | to_variant)) {
std::visit([](const auto& v) { foo(v); }, v);
}

Demo

关于c++ - 使用 ranges-v3 连接不同类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72941136/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com