标签: istream-view

如何将 istream_view 收集到容器中?

我想实现我的扩展的通用减少操作ranges,将收集的任何元素range到一个给定的容器。为了实现这一点,我首先创建了一个用于提取template template参数的虚拟类型,并提供operator|了将 arange与其组合:

template <template <typename> typename T>
struct to_fn { };

template <template <typename> typename T>
inline constexpr detail::functors::to_fn<T> to;

template <template <typename> typename T>
auto operator|(std::ranges::range auto&& rng, detail::functors::to_fn<T>) {
    return T(std::ranges::begin(rng), std::ranges::end(rng));
}
Run Code Online (Sandbox Code Playgroud)

测试如下:

int main() {
    using namespace std::ranges;
    std::vector<int> vec = {1, 2, 3, 4, 5};
    auto set = vec | to<std::set>;
    static_assert(std::same_as<decltype(set), std::set<int>>);
    assert(equal(vec, set));
}
Run Code Online (Sandbox Code Playgroud)

代码完成执行没有问题。

但是,代码在与 一起使用时无法编译std::ranges::istream_view …

c++ containers c++20 std-ranges istream-view

5
推荐指数
1
解决办法
123
查看次数

什么是 istream_view?何时使用?

显然,C++20 有一个新的std::istream相关构造:std::istream_view其上的 cppreference 页面现在是一个存根\xe2\x80\xa0。那么,什么是“视图istream”以及我可以用它做什么?

\n
\n

\xe2\x80\xa0 - 好吧,从技术上讲,它重定向到一个关于std::basic_istream_view存根的页面。

\n

c++ range istream c++20 istream-view

5
推荐指数
1
解决办法
1091
查看次数

标签 统计

c++ ×2

c++20 ×2

istream-view ×2

containers ×1

istream ×1

range ×1

std-ranges ×1