根据 cppreference,view_interface
使用奇怪重复模板模式 (CRTP) 技术定义视图的帮助类模板。
它们背后的设计理念是什么?与在派生类中覆盖虚拟基类方法相比,是否有显着优势?
根据 cppreference,view_interface
使用奇怪重复模板模式 (CRTP) 技术定义视图的帮助类模板。
它们背后的设计理念是什么?与在派生类中覆盖虚拟基类方法相比,是否有显着优势?
如果你给一个基类虚函数,那么它就有这些函数。总是。它永远不可能没有这些功能,并且从它派生的每个类都将继承这些功能。
view_interface
empty
当且仅当该类型的范围类别为 时,才具有函数forward_range
。也就是说,empty
如果begin
返回一个前向迭代器,则存在,并end
为该迭代器返回一个哨兵。但是你只能测试如果你可以查询派生类的属性。基类不能这样做......除非你通过给它派生类类型来允许它。这意味着它必须是模板参数,并且基类是模板。
因此,您使用的是 CRTP。
基于派生范围类的迭代器类别是否提供通用功能是该类的全部要点。唯一的选择是为每个迭代器类型设置一堆基类。所以你有forward_view_interface
前向范围,contiguous_view_interface
连续范围等。那会很痛苦。但它会开始经历乘法爆炸,因为 提供的某些属性view_interface
与迭代器类别正交。
例如size
,如果范围是大小范围,则提供。但这可能发生在任何迭代器类别中,甚至是输入迭代器。所以你现在需要sized_forward_view_interface
等。
或者你可以只使用 CRTP。