Effective C++ .44 typename和class的不同
在C++模板中的类型参数一般可以使用typename和class,两者没有什么不同。但是typename比class多项功能:
“任何时候当你想要在template中指涉一个嵌套从属类型名称,就必须在其前面加上关键字typename”
因为C++默认情况下把属性都作为值来看待而不是类型。
#include <iostream> #include <cstdlib> class Integer { public: typedef int value_type; }; class Double { public: typedef double value_type; }; template<class DataType> class Storage { public: typename DataType::value_type data; }; int main() { Storage<Integer> s; s.data = 3.4/2; std::cout<<s.data<<std::endl; return 0; }