我正在玩概念并遇到障碍。或者也许只是我的思想被阻塞了。
我想创建一个缓冲“批量可读”数据源的类。这样的数据源应该有一个成员函数,它接受一个 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)
这种方法甚至可行吗?如果是,如果我不想/可以指定类型,我如何要求模板化方法签名?