1、考慮下面的場景,有個類模版template<typename T> Box{}; 內部有個方法XXX,現在子類template<typename T> class BigBox:public Box<T>{},BigBox內部使用方法XXX,考慮出現什麼問題?
2、首先一點,類模版產生出來的類之間,沒有關係。也就是Box<Book> 與Box<Dog>沒有關係。通過指定模版實參,可以產生不同的模板類,也可以全特化一個類,如下:
template <>
class Box<Cat>{...},這種情況下,就不再例項化模版類了,Box<Cat>可以宣告自己的介面,可能就沒有了XXX。那麼,問題出現了,BigBox繼承Box<T>,但是父類Box<T>可能有介面XXX,也可能沒有介面XXX,編譯器傻眼了。那麼還要不要繼承父類Box<T>的XXX方法呢?因為不確定一定有,所以不繼承,導致上面的情況編譯失敗。
3、怎麼解決?
解決辦法很簡單,就是明確說,我要繼承父類Box<T>的方法。
a、使用this->XXX();
b、使用using Box<T>::XXX;
c、使用Box<T>::XXX();
第三種辦法不好,因為會關閉virtual繫結行為。