- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
根据cppreference,定义 View 的辅助类模板view_interface
使用奇怪的循环模板模式 (CRTP) 技术。
它们背后的设计理念是什么?与在派生类中覆盖虚拟基类方法相比,是否有显着优势?
最佳答案
如果你给一个基类虚函数,那么它就有那些函数。总是。它永远不具有这些功能,并且从它派生的每个类都将继承这些功能。
view_interface
有一个 empty
函数当且仅当类型的范围类别是 forward_range
时。也就是说,如果 begin
返回前向迭代器,并且 end
返回该迭代器的标记,则 empty
存在。但是您只能测试是否可以查询派生类的属性。基类不能这样做......除非你通过给它派生类类型来允许它。这意味着它必须是一个模板参数,基类是一个模板。
因此,您正在使用 CRTP。
根据派生范围类的迭代器类别提供或不提供公共(public)功能是该类的整点。唯一的选择是为每种迭代器类型设置一组基类。因此,您需要 forward_view_interface
用于前向范围,contiguous_view_interface
用于连续范围,等等。这会很痛苦。但它会开始经历乘法爆炸,因为 view_interface
提供的一些属性与迭代器类别正交。
例如,如果范围是大小范围,则提供 size
。但这可能发生在任何迭代器类别中,甚至是输入迭代器。所以你现在需要 sized_forward_view_interface
等
或者您可以只使用 CRTP。
关于c++ - 为什么 std::ranges::view_interface 使用 CRTP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66094846/
根据cppreference,定义 View 的辅助类模板view_interface使用奇怪的循环模板模式 (CRTP) 技术。 它们背后的设计理念是什么?与在派生类中覆盖虚拟基类方法相比,是否有显
我不明白搬家的要求从何而来。我在 forward_range 和 sized_sentinel 中找不到它...基本示例: #include #include #inclu
我是一名优秀的程序员,十分优秀!