现在的位置: 首页 > 综合 > 正文

类模板的成员函数

2014年02月27日 ⁄ 综合 ⁄ 共 819字 ⁄ 字号 评论关闭
类模板的成员函数
1。涉及模板参数T的一定是个函数模板;
2。 不涉及(形式上,函数体,参数表内没出现)模板参数T的也是个函数模板;
       角度一:成员函数的类型中包含一个属性“属于什么类”,所以void A<T>::fun(){};这是就和T建立了联系,这时就能说明即使函数体内不涉及T类型,它也是个函数模板,因为由不同T类型,是不同的函数类型(因为域概念是成员函数类型的一部分)

(在类外的定义时需写上template<...>,类内可以省略)
C++的语法规则

引申:
从解析标识符的角度去理解,凡是使用可变类型的函数只有写成一个函数模板的时候,语法机制才能是它通过编译;
特殊地,类模板的成员函数,即使不涉及可变类型(形式上,因为本身是类模板的成员,则一定涉及可变类型,这里说的只是形式上,函数体,参数表内没出现角度二:从实例化的角度理解,即使都没使用T类型,但对于不同T,实例化不同类,在用到的时候,编译生成多份代码指令流,分别属不同的类所有,封装的意味,谁的就谁的并不共享,即使相同,但由于属于不同的类,也互相不影响

template<class T>
class A{};

template<class T>
void tfun(A<T> *){cout << "template function" << endl;};

//void nfun(A<T> *){cout << "no template function" << endl;}//声明就不能通过,无法解析名字T,假设能解析的话,这个属非模板函数,是一个普通函数
void nfun(A<int> *){cout << "no template function" << endl;}

问题:
如果成员函数的是一个非绑定的函数模板呢,也就是说引入无限多个成员函数,函数的T1和类的T2是独立的(当然可以相等),这个情况支持么,如何支持的
回答:
支持,这种语法机制的叫做成员模板(函数模板和类模板可以是普通类的成员,也可是另一个类模板的成员)

抱歉!评论已关闭.