欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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,这个结构体中不存在元素,所以没有开销,但是能够区分不同的方法调用,这已经足够了,不是么。