设为首页 加入收藏

TOP

Visual C++泛型编程实践(二)
2014-11-23 19:52:48 】 浏览:503
Tags:Visual 编程 实践
e <typename T>
Struct Type2Type
{
typedef T OriginalType;
};
   它没有任何数值,但其不同型别却足以区分各个Type2Type实体,而这正是我们所要的。现在,让我们来先解决addMember成员函数中的获取下一个可用ID号的函数,我们可以定义一个重载的函数如下:

size getNextMemberID(Loki:: Type2Type<Employee>)
//对应职员操作
{
  if (itsEmployees.empty())
   return 1;
  std::map<size,Employee*>::iterator it=itsEmployees.
  end();
  --it;
  return it->first+1;
}
size getNextMemberID(Loki:: Type2Type<Account>)
//对应帐户操作
略..

   相应的,删除类函数定义如下:

void delMember(size ID, Loki:: Type2Type<Account>)
void delMember(size ID, Loki:: Type2Type<Employee>)

   获取类函数定义如下:

Account* getMember(size ID, Loki:: Type2Type<Account>)
Employee* getMember(size ID, Loki:: Type2Type<Employee>)

   这样,我们的函数接口就比刚开始的方法更清晰,我们的大脑中要记住的函数名就要少多了。
   第二次改进:使用模板技术减少接口函数数量经过第一次的改进,我们的接口结构比初始的方案要更清晰,但它似乎还存在一个问题:软件大师Martin Fowler在他的著作《重构――改善既有代码的设计》中将之列为代码的坏味道之首――代码重复。我们可以看到,添加、删除、获取的函数实现中,几乎完全是一样的实现逻辑,只不过所操作的map变量不同而已,如下(以添加为例):

size addMember(Account* e); //添加帐户
{
  //获取下一个可用的ID

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇VC++实现对远程计算机屏幕的监视 下一篇VC++删除浮动工具条中“关闭”按钮

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目