C++设计模式之应用(型别对型别的映射) 实例讲解
程序员文章站
2022-03-08 23:03:52
现在假如说我们有一个通用的函数create用于来创建对象,但是对于某些特殊的类来说,创建方式又有所不同(参数不同),这里我们假设所有的类都继承自animal类,person类也同样如此,但是pers...
现在假如说我们有一个通用的函数create用于来创建对象,但是对于某些特殊的类来说,创建方式又有所不同(参数不同),这里我们假设所有的类都继承自animal类,person类也同样如此,但是person类的初始化方式比anima类多了一个参数(这个参数是个常数)这个时候,解决方式有两种:
首先来看第一种:
template t *create(u args,t ){}; template t *create(u args,person ){};
这里对create进行重载,唯一的区分是第二个函数的第二个参数类型必须是person类型,但是你注意到没,当你调用第二个的时候,虽然起到了区分的作用,但是你需要传递进来一个构造的具体对象,虽然这个对象你并不需要,这会造成性能问题,所以鉴于此,便有了下面的改进版本。
template struct type2type{ typedef t typedt; }; template t *create(u args,type2type){}; template t *create(u args,type2type){};
这里定义了一个新的结构体type2type,这个结构体中不存在元素,所以没有开销,但是能够区分不同的方法调用,这已经足够了,不是么。
上一篇: C++初学者必看的知识思维导图