编译器多态

要点: 隐式接口和编译期多态.

void doPro(T & w){
        if(w.size()>0 && w != DefaultW) {
                T temp(w);
                temp.init();
                w.swap(temp)
        }
}

要点: T 要支持什么? size,>, !=,copy constructor,init,swap..

然而不是要求模板 T 一定显示要有上面的接口,只要编译表达式的规则,就能通过编译:

size()可以来自T的父类;
size()返回int; >自然成立;(满足操作符重载,下同)
size()返回任意对象X, X重载了>;
size()返回任意对象Y, Y没有重载>,但是Y可以隐式转换为X;
同理, != 操作符右边的DefaulW可以是任意对象,只要对应的操作符实现了;

以上是模板的隐式接口的含义. 显然不同模板完全导致不同的具体实现,这是模板的编译多态.

关于嵌套从属名称