在提议的 C++20 (The One) Ranges TS 中,将视图转换为 std::vector 的提议方法是什么?
以下代码无法编译:
int
main() {
std::vector<float> values = {1.0, 2.0, 3.0, 4.0, 5.2, 6.0, 7.0, 8.0, 9.0};
//fmt::print("{}\n", std::experimental::ranges::views::filter(values, [] (float v) { return v < 5.f; }));
std::vector<float> foo = vw::filter(values, [] (float v) { return v < 5.f; });
fmt::print("{}\n", foo);
}
有错误
../src/view.cpp:19:40: error: conversion from ‘std::experimental::ranges::v1::filter_view<std::experimental::ranges::v1::ref_view<std::vector<float> >, main()::<lambda(float)> >’ to non-scalar type ‘std::vector<float>’ requested
std::vector<float> foo = vw::filter(values, [] (float v) { return v < 5.f; });
(由于某些 CV 限制,注释行也不会编译)。
那么除了使用基于范围的 for 循环之外,我如何对视图执行任何操作?
还有一些额外的问题:
- 我使用的 cmcstl2 实现是否甚至遵循该提案?范围-v3 似乎不是。
- 是否有关于 Ranges TS 的任何文档?我发现的提案 PDF 几乎是 diff 风格的格式非常糟糕的代码转储。事实上,直接阅读 cmcstl2 源代码对我来说更容易阅读。cppreference 似乎也缺乏......