因为这一章的内容在《泛型编程与STL》一书中学过,所以看得有点快。
1, 泛型编程是通过定义语用来分离数据结构和算法关系的一种编程方法论, 是构造BGL的基础。这种方法是ADTs的延深
2, 语用可以用虚基类的虚函数实现,多态性是C++的基础
3, 在面向对象编程中,多态性用子类型修饰且用虚基类和继承实现;泛型编程中, 多态性用参数化来修饰且用类模板或函数模板实现
4, 模板函数调用比虚函数调用要快
5, 逆变性子类型规则:继承类的虚函数参数类型必须和它在基类参数的类型一样,或是基类
6, 使用dynamic_cast 会引起运行时异常
7, Std::cout <<Std::boolalpha << std::boolval 能输出“false”or “true”
8, 用模板实现BGL可以避免函数二义性问题
9, 泛型解决问题的步骤:确定有效的算法—>一般化算法—>定义最小量的能让算法运行的语用—>基于语用构建一个框架
10, 在泛型编程的术语中,BGL发明了一个新的术语:conept check,并在<boost/concept_check.hpp>中实现,以便于排查泛型编程引起的错误。
11, BCCL提供了一个“范型”类类型(<boost/concept_archetype.hpp>),实现concept covering 术语
12, BGL里的名字限制在名字空间boost中
13, 图类型的函数与算法的函数不同,前者可重载,后者是在boost 中的模板函数
14, 为了保持更好灵活性,许多BGL算法中有很长参数表,但常用 的不多,所以提供了许多默认参数。默认形参的调用规则,在使用时有很大的限制,所以BGL提供了一种Named Function Parameters, e用bgl_named_params类实现