在拟议的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; });
(由于某些简历约束,注释行也不会编译)。
那么除了使用基于范围的for循环外,如何对视图做任何事情?
还有一些奖励问题:
- 即使遵循该建议,我仍使用cmcstl2实现吗? range-v3似乎不是。
- Ranges TS上有任何文档吗?我发现的PDF提案几乎是diff格式的格式错误的代码转储。实际上,直接阅读cmcstl2源代码对我来说更容易阅读。似乎也没有cppreference ...