c++ - 为什么我需要评估 range-v3 视图才能将它们与 concat 一起使用?
问题描述
我正在尝试在仅移动类型上连接多个视图:
using namespace ranges;
auto v = views::ints(0, 4) |
views::transform([](int i) { return std::make_unique<int>(i); });
auto w = views::ints(4, 8) |
views::transform([](int i) { return std::make_unique<int>(i); });
auto x = views::concat(v, w) | to<std::vector>();
但是,这不适合我编译,我无法理解错误消息(请参阅https://godbolt.org/z/TcoP8djnz)。
但是,如果我选择评估v
并且w
首先,代码会编译:
auto v = views::ints(0, 4) |
views::transform([](int i) { return std::make_unique<int>(i); }) |
to<std::vector>();
auto w = views::ints(4, 8) |
views::transform([](int i) { return std::make_unique<int>(i); }) |
to<std::vector>();
auto x = views::concat(v | views::move, w | views::move) | to<std::vector>();
这是为什么?根据range-v3 doxygen的要求是参数为concat
sviewable_range
和input_range
s。虽然我不确定我是否完全理解前一个概念的含义,但我认为即使在第一种情况下也应该满足这两个要求。
make_unique
顺便说一句,当我替换为时,第一种情况也会编译make_shared
,即我用可复制类型替换它。
解决方案
推荐阅读
- r - 给定包含R中根的向量,如何计算多项式的系数
- google-sheets - Google表格:根据单元格的COUNTA重复一行,ARRAYFORMULA
- android - 更新 targetSDK 版本后出错 - ListView 不起作用:空对象引用上的接口方法“int java.util.List.size()”
- node.js - 猫鼬不与数据库交互
- javascript - 如何检查带有动态创建元素的下拉列表中的 document.click?
- c - 使用 fork() 从 exit() 返回奇怪地移位了
- python-3.x - 测量电脑游戏运行多长时间
- swift - 尝试删除 firebase 引用时的问题
- jquery - jQuery 保持对输入的关注,除非关注另一个输入
- c# - Dotnet 安装自定义模板问题