***Template的“具现”行为*** template class中的任何member都只能通过template class的某个实体来存取或操作。 Point<float>::Status s; // ok 如果我们定义一个指针,指向特定的实体,像这样: Point<float> *ptr = 0; 由于这是一个指向class object的指针,本身并不是一个class object,编译器不需要知道与该class有关的任何members数据。所以将“Point的一个float实体”具现也就没有必要。 如果不是一个pointer而是reference,假设: Point<float> &ref = 0; 这个定义的真正语意会被扩展为: // 内部扩展 以上转化是因为reference并不是无物(no object)的代名词,0被视作整数,必须被转换为类型Point<float>的一个对象。 然而,member functions只有在member functions被使用的时候,C++ Standard才要求它们被“具现”出来。这个规则的由来主要有两个原因: !--判断阅读权限-->!--判断是否已经扣点--> |
