用户登录
用户注册

分享至

C++设计模式之应用(型别对型别的映射) 实例讲解

  • 作者: 硬不硬只有我知道
  • 来源: 51数据库
  • 2021-08-27

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

软件
前端设计
程序设计
Java相关