1,一般情况下typename和class可以互换。
2,但是当需要表示某标识符是类型的时候用只能用typename而不能用class。
当要获得类的成员类型时,必须用typename
比如
template
class MyClass {
typename T::SubType * ptr;
};
有了typeanme,SubType就被当成了T中定义的一个类型;
如果这里没有typename,SubType就会被当成一个static member,而 * 就被当成乘法了。
可以的,定义模板的时候它们是通用的
你的意思是 typedef 和Class 是吗
有区别的 typedef 是自定义类型 如 typedef struct Fruit{ string name;
string color;
float price;
}
这里没有方法 只有变量 要比Class Fruit 省空间 类里还有方法 要占一定空间
Class Fruit
{ private:
string name;
string color;
float price;
Fruit();
~Fruit();
}
而且概念上 Class 是可以继承的 typedef 只是定义一个变量 ,给变量一个名字方便使用
如 typedef int age ; age a 就等于 int a 就是 方便说明 变量的逻辑作用
如果你非要 用类来做是完全可以的 但有时从性能 各方面可虑C++ 还是要以情况分别使用的好
像JAVA 是纯面向对象 就没有typedef 功能啦