读书人

effective c++ - 模板与泛型编程

发布时间: 2012-09-02 21:00:34 作者: rapoo

effective c++ -- 模板与泛型编程
面向对象提供了运行期的多态,而模板则提供了编译期的多态。模板的编译期多态机制使得函数匹配机制相对于非模板的函数匹配发生了一些变化,也影响了继承体系下的一些声明与设计。本章讲解了模板的编译期多态对我们原先所熟悉的没有模板的世界的一些区别,最后介绍了traits class以及template元编程。

Item 41: 了解隐式接口和编译期多态
通常显式接口由函数的签名式(函数名称、参数类型、返回类型)构成。例如Widget class:

void advance( std::list<int>::iterator& iter, int d ){  if( typeid(std::iterator_traits<std::list<int>::iterator>::iterator_category)      == typeid( std::random_access_iterator_tag ) )    iter += d;//!错误发生在这里  else    ...}

我们知道,iter+=d总是不会被执行到,但是编译器看到了,它要求所有的源码都必须有效,即使是不会执行起来的代码。因此,编译不通过。
traits class,或者应该说,template编程真是一件神奇的事情。

Item 48: 认识template元编程
至于元编程,我想我是真不知道怎么去总结了。只觉得它非常奇妙。就像前面的advance一样,也是元编程的一种。我们已经看到,advance是如何通过元程序将工作由运行期移往编译期的,也由此得以实现早期错误侦测和更高的执行效率。

读书人网 >编程

热点推荐