template之模板中class与typename区别,stl::traits技术
前言 在分析traits编程之前, 我们需要对模板参数类型tempname和class有一定的了解, 要明白他们在哪些方面不同, 哪些方面相同, 这样才能对体会到traits编程的核心. 如果你已经明白了两者, 那么你可以直接看下一篇了. 相同之处 一般对模板参数类型typename和class认为是一样的. 这两者在参数类型中确实是一样的. 你可以写成 template<class T> class point {}; 1 2 也可以写成 template<typename T> class point {}; 1 2 这两者都是一样的, 没有区别. 两者typename和class在参数类型中没有不同 既然相同又为什么定义这两个符号呢? 最开始定义定义模板的方法就是template<class T> , 但是class毕竟都认为是一个类, 在使用时难免会有些点混淆, 也就定义了typename来标志参数类型 最重要关于 typename可以使用嵌套依赖类型, 也就是类型可以嵌套使用. 这也是两个的不同之处. 不同之处 typename可以用在嵌套依赖中, 并且表示其类型, 而class并没有这样的功能. 什么是嵌套依赖? 我们以一个简单的实例来看 template<class T> class people { public: typedef T value_type;