定义一个参数中有迭代器的函数模板会产生一个问题,我们并不总是知道在函数模板中要用到哪些类型的迭代器。思考下面用迭代器作为参数的交换函数;模板类型参数指定了迭代器类型:
函数模板的实例用来交换迭代器参数所指向的两个对象:a 和 b。dmp 应该是什么类型我们没法知道,我们知道迭代器指向对象的类型却无计可施,因为直到类模板生成实例时,才能确定对象的类型。在不知道对象的类型时,如何定义变量?当然,这里可以使用 auto。在一些情况下,我们也想知道迭代器类型的值和类型差别。
有些其他的机制可以确定一个迭代器参数所指向值的类型。一种是,坚持要求每个使用 my_swap() 的迭代器都应该包含一个公共定义的类型别名,因为这样就可以确定迭代器所指向对象的类型。既然这样,就可以在迭代器类中使用 value_type 的别名来指定函数模板 my_swap() 中 tmp 的类型,如下所示:
因为 value_type 的别名定义在 Iter 类中,所以可以通过用类名限定 value_type 的方式引用它。这样定义了 value_type 别名的迭代器类就能在函数中正常使用。然而,算法既使用指针,也使用迭代器;如果 Iter 是普通类型的指针,例如 int*,甚至是 Box*,而 Box 是类型一这样可能就无法使用了。因为指针不是类,不能包含定义的别名,所以不能写成 int*::value_type 或 Box*::value_type。STL 用模板优雅地解决了这个问题和其他一些相关问题!
如果您发现该资源为电子书等存在侵权的资源或对该资源描述不正确等,可点击“私信”按钮向作者进行反馈;如作者无回复可进行平台仲裁,我们会在第一时间进行处理!
加入交流群
请使用微信扫一扫!