- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在玩概念并遇到障碍。或者也许只是我的思想被阻塞了。
我想创建一个缓冲“批量可读”数据源的类。这样的数据源应该有一个成员函数,该函数接受一个 OutputIterator 并具有如下签名:
template<typename It>
size_t read(It firstItem, size_t max)
BulkReadable
类似的概念:
template<typename Source>
concept bool BulkReadable =
requires(Source s, Iter out, size_t max) {
{s.read(out, max)} -> size_t;
};
Iter
.我可以在模板参数列表中添加另一个类型名,但是想要使用该概念的 Buffer 类需要指定该参数的类型。
template<BulkReadable Source>
class Buffer {
public:
Source& input:
Buffer(Source& input) : input(input){}
...
最佳答案
这是一个常见的问题,即提出错误的概念问题,您试图像使用基类接口(interface)一样使用它们。使用基类,您可以声明派生类要实现的确切、特定的功能。您希望用户完全实现您说他们必须的功能。
有了概念,你从另一个方向处理问题:你试图创造什么用途?
在您的代码中的某个时刻,您有一些对象、一些迭代器和一个大小。您将获取该对象,通过将迭代器和大小传递给它来调用函数,并且您期望返回某种类型的响应。而这个过程是有一定意义的。
那就是你的概念。这是一个基于至少 2 个参数的概念:对象的类型和迭代器类型。所以这就是你应该创造的。
如果你有这个 BulkReadable
约束,那么你必须有一些接口(interface)约束它。将调用 read
的接口(interface).调用read
,该接口(interface)必须有一个迭代器。
所以这里是选项:
BulkReadable
中使用该类型即可。约束。如果迭代器类型基于对参数的一组复杂操作,那么您必须进行一些计算来计算迭代器类型。 read
的时候,你知道迭代器类型是什么。因此,您可以使用该类型约束事物。因此,您的概念并不是真正的
BulkReadable
, 但是
BulkReadableFrom
.
关于需要以 OutputIterator 作为参数的成员函数的 C++ 概念,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61443027/
C++ 要求 OutputIterator 类型 X 支持 r++ 形式的表达式,其中 r 是 X。此后缀增量必须在语义上等同于: (*) { X tmp = r;++r;返回 tmp; } 并且必须
根据(优秀的)问题 C++ OutputIterator post-increment requirements ,我们观察到对于 OutputIterator 类型 X 的可取消引用和递增值 r,以
我在一篇关于 OutputIterator 的文章中读到,我们只能将其解引用为左值。我的问题是关于 operator++ 的,它将迭代器递增一个位置。 所以, *it++ = t 会是 {*it =
我正在玩概念并遇到障碍。或者也许只是我的思想被阻塞了。 我想创建一个缓冲“批量可读”数据源的类。这样的数据源应该有一个成员函数,该函数接受一个 OutputIterator 并具有如下签名: temp
我正在玩概念并遇到障碍。或者也许只是我的思想被阻塞了。 我想创建一个缓冲“批量可读”数据源的类。这样的数据源应该有一个成员函数,该函数接受一个 OutputIterator 并具有如下签名: temp
我正在玩概念并遇到障碍。或者也许只是我的思想被阻塞了。 我想创建一个缓冲“批量可读”数据源的类。这样的数据源应该有一个成员函数,该函数接受一个 OutputIterator 并具有如下签名: temp
我正在尝试编写一个接受 OutputIterator 并将值写入其中的 C++ 函数,但我遇到了各种问题。当我传入 list<> 迭代器时,列表未填充,当我传入 vector<> 迭代器时,出现段错误
第 1.3.2 节 here在 CGAL 文档中主张使用 OutputIterator 返回 convex_hull_2() 的结果,因为调用时容器为空,因此我们无法传递 result.begin()
函数模板 std::copy 的等价物是: template OutputIterator copy (InputIterator first, InputIterator last, Output
我正在使用 CGAL 的 Kd 树实现以及模糊球体作为查询对象,以获取以点为中心的半径为 r_max 的球体中包含的点。这是这个最小的工作示例: #include #include
我创建了一个简单的不可变双向迭代器: #include #include #include #include #include class my_iterator : public std:
我正在为自定义容器定义迭代器。迭代器实现了 InputIterator 和 OutputIterator 概念。 iterator::reference 和 const_iterator::refer
(此问题与 Why does std::max_element require a ForwardIterator? 具有相同的“问题模板”,但答案必须不同,因为 std::fill 不会将迭代器返回
我是一名优秀的程序员,十分优秀!