typedef 是一个聪明的孩子,他总是按语义翻译:
typedef char* SPtr;
那么当如下形式定义变量p,q时,
SPtr p,q; //等价于char *p, *q;
定义的p,q都是char*的指针变量
相比之下,macro就不求甚解,它总是死板硬套
#define char* SPtr;
SPtr p,q;//等价于char *p,q;
则定义的变量p是char*的指针变量,但是q就不是了,它只是char类型的字符变量。
那么模板参数究竟如何呢?很可惜,他更像是macro的种,不过却可以轻松质变
template< typename T >
class A
{
T p,q;
};
当你传入char*给模板形参T的时候,得到变量p,q就形如char*p,q;所以默认行为下与macro相同
不过也可以轻易的改变过来
template< typename T >
{
typedef T Type;//实现脱胎换骨的点
Type p,q;
};
typedef T Type;访问属性设为private,从而对外部用户透明。