泛型函數(shù)也是可以重載的十嘿,其重載規(guī)則與普通函數(shù)的重載沒有啥區(qū)別。另外屈嗤,泛型一般都是放在頭文件中的潘拨,這也包括它的泛型實(shí)現(xiàn)在內(nèi)。
泛型函數(shù)還有第三種用法饶号,那就是顯式指定铁追,如下圖所示:
有的時(shí)候可以簡寫成:
因?yàn)橛械臅r(shí)候編譯器可以根據(jù)形參的類型推出顯式指定的類型。
但是使用這種顯示指定的泛型函數(shù)必須要以普通泛型的存在為前提茫船。不同于一般的泛型算法琅束,一般的泛型算法的實(shí)現(xiàn)基本相同只不過類型不同而已。但是如果你想實(shí)現(xiàn)一種完全不同于一般泛型的功能算谈,而它的功能實(shí)現(xiàn)碼是它自己獨(dú)有的涩禀,你就需要顯示特化。
而一般函數(shù)被調(diào)用的順序是首先使用非泛型函數(shù)然眼,然后考慮顯式指定的泛型函數(shù)艾船,最后沒辦法了再去使用普通的泛型函數(shù)。
須知泛型本身并不是函數(shù)的定義,它只不過是一個(gè)準(zhǔn)備屿岂,預(yù)備式而已礁蔗。而只有當(dāng)有實(shí)參傳進(jìn)來的時(shí)候才能自動確定一個(gè)泛型函數(shù)的定義。但是現(xiàn)在你要做的是手動確定一個(gè)泛型函數(shù)的精確聲明雁社,那編譯器遇到特定情況的時(shí)候就能直接找到這個(gè)手動指定的聲明浴井,并為之實(shí)現(xiàn)定義,這個(gè)時(shí)候你該怎么辦霉撵,如下圖所示磺浙。
和上面講到的顯式指定不同的是,它在template后面沒有<>修飾徒坡。
這兩者是有區(qū)別的撕氧。顯式指定相當(dāng)于使用另一個(gè)獨(dú)立的函數(shù),而后者是沿用泛型算法的機(jī)制喇完,不過類型已經(jīng)被你指定了而已伦泥。