设为首页收藏本站

LUPA开源社区

 找回密码
 注册
文章 帖子 博客
LUPA开源社区 首页 业界资讯 技术文摘 查看内容

现代C++为什么采用泛型编程?

2014-12-12 16:17| 发布者: joejoe0332| 查看: 11070| 评论: 0

摘要: 正如 Biarne Stroustrup 指出的那样,“C++ 是一种多范型的语言。”它支持不同风格的程序和范例,面向对象的编程只是其中之一,还有结构化编程和泛型编程。在过去几年 C++ 方面专家 Andrei Alexandrescu,Scott Meye ...

  正如 Biarne Stroustrup 指出的那样,“C++ 是一种多范型的语言。”它支持不同风格的程序和范例,面向对象的编程只是其中之一,还有结构化编程和泛型编程。在过去几年 C++ 方面专家 Andrei Alexandrescu,Scott Meyers 和 Herb Sutter 推荐用户使用泛型编程,他们将它成为现代 C++设计。



关于现代 C++ 设计,Andrei Alexandrescu 这样说:

现代 C++ 设计定义并系统地使用通用组件——高度灵活的设计品是少量的 orthogonal body of code 和丰富的行为的融合和匹配。


他提出了如下三个观点:

  • 现代 C++ 设计定义并系统地使用通用组件
  • 高灵活度
  • 使用少量 orthogonal body of code 得到丰富的行为


泛型的灵活性

  为了更加清楚的了解泛型的灵活性,下面比较一下在 OOP 和泛型中税收计算类的实现。


OOP 实现:



  CTaxCalculator 类能告诉我们什么?


  我是 CTaxCalculator 类,我知道如何计算税收,但我只与 ICalculator 类型的类协作。我拒绝与任何其他任何非 ICalculator 类合作,即使它可以帮我计算税。


  泛型实现:



  CGenericTacCalculator 类知道如何计算税收,并且能够和任何类型合作进行税收计算。


  这使得泛型编程更自然的和灵活,第一种方法就想是在现实世界中,一个公司只接受一个从特定学校毕业的开发人员,拒绝其他人即使他们有相应的技术。


  但代码变得灵活的代价是变得难以理解。事实上在 OOP 中我可以直接去看 ICalculator 类的定义,就可以知道我们我们能从这个类型中获得什么。而在泛型编程中我们很难确切知道能从参数模板中得到什么,哪些参数是必须包含的?是否必须来自一个特定的类型?


  的确 C++ 特性 SFINAE 机制能帮助我们定义从模板参数中得到什么,但这项先进的特性是很少C++ 开发者掌握的。


  C++ 设计师们意识到这个问题,并在新的 C++ 标准中,添加了许多模板编程的改进。大家能看到非常有趣 “Concept-lite” 特性,它用来定义参数模板的限制。



酷毙

雷人

鲜花

鸡蛋

漂亮
  • 快毕业了,没工作经验,
    找份工作好难啊?
    赶紧去人才芯片公司磨练吧!!

最新评论

关于LUPA|人才芯片工程|人才招聘|LUPA认证|LUPA教育|LUPA开源社区 ( 浙B2-20090187 浙公网安备 33010602006705号   

返回顶部