小编Chr*_*Ott的帖子

C++ 概念需要一个以 OutputIterator 作为参数的成员函数

我正在玩概念并遇到障碍。或者也许只是我的思想被阻塞了。

我想创建一个缓冲“批量可读”数据源的类。这样的数据源应该有一个成员函数,它接受一个 OutputIterator 并具有如下签名:

template<typename It>
size_t read(It firstItem, size_t max)
Run Code Online (Sandbox Code Playgroud)

我的想法是定义一个BulkReadable类似于以下内容的概念:

template<typename Source>
concept bool BulkReadable = 
    requires(Source s, Iter out, size_t max) {
        {s.read(out, max)} -> size_t;
    };
Run Code Online (Sandbox Code Playgroud)

我在指定Iter. 我可以向模板参数列表中添加另一个类型名,但是想要使用该概念的 Buffer 类需要指定该参数的类型。

我想如何使用这个概念的理想方式是:

template<BulkReadable Source>
class Buffer {
  public: 
    Source& input:
    Buffer(Source& input) : input(input){}
    ...     
Run Code Online (Sandbox Code Playgroud)

这种方法甚至可行吗?如果是,如果我不想/可以指定类型,我如何要求模板化方法签名?

c++ c++-concepts c++20

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

标签 统计

c++ ×1

c++-concepts ×1

c++20 ×1