为啥 boost::range::adaptor 中使用了这么多种 range 类型

个人没有用过这个东西,但是看Introduction第一句话“A Range Adaptor is a class that wraps an existing Range to provide a new Range with different behaviour.”基本上可以猜测是为了保证stateless并且没有运行时开销。如果用同一个类,你wrap的同时,内部需要通过某种机制保存了它应当表现的行为,比如虚函数指针或者枚举变量。然后运行的时候动态检查。如果把这个机制用模板参数来做,每种wrapper就变成了一个新的类型,于是就变成这个样子了。


    推荐阅读