2011-07-10 28 views
1

我很困惑。我似乎從來沒有決定要使用什麼,模板或重載函數。過載需要更多的編碼。那麼在什麼情況下,它最好使用模板和重載函數?什麼時候應該使用模板和重載函數?

例如,我最近不得不在做一個小的GBA遊戲時做出這個決定。有兩種類型u16int我決定使用重載函數。

inline void Point::Move(int x, int y) {_ix += x; _iy += y; } 
inline void Point::Move(u16 x, u16 y) {_ix += (int) x; _iy += (int) y; } 

應該使用模板嗎?在什麼情況下我應該使用重載函數?

回答

8

基本規則應該是:

使用模板當你想在不同的數據類型執行相同的功能/操作

使用重載函數當你想在不同/相同的數據類型

而且,當你真的需要一個重載函數在模板一個很好的措施進行不同的功能/操作是當你正在爲功能模板化版本進行太多明確的專業化。

在你的例子中,如果你在這兩個函數的版本中執行相同的操作,你應該使用模板,否則你應該使用Overloaded函數。

+3

**我可以ha mo BOLD嗎?**(+1) – Mehrdad

+0

@Mehrdad:不理解你的評論.. –

+2

@Als他的意思是你有**許多文字** – ApprenticeHacker

3

據我可以看到一個模板解決方案將導致相同的編譯對象,但沒有在源重複。模板明確勝出。

我不明白有關模板需要更多內存的觀點。這聽起來像是一個迷思。

+0

這就是我通過閱讀論壇得到的一種混亂的虛假信息。 「模板需要更多的內存!!!」和「模板慢!!!」和一百零一件反對模板的東西,反之亦然。所以很抱歉 – ApprenticeHacker

+0

(+1)的真棒回答。 :) – ApprenticeHacker

+3

我認爲模板的使用會使編譯器難以生活。也許這就是內存/緩慢共鳴來自 –

1

當你知道你要使用的類型時,通常你會重載一個函數。

通常當你使用的類型之間存在實際的邏輯差異(不同的代碼)時,你會重載一個函數。
你可以這樣做,因爲你知道實際的類型和他們的特徵。

模板的強大之處在於,您可以將函數寫入一次,然後使用該方法獲取所需的任何類型。
但模板應該足夠一般,以適應給它的任何類型。

相關問題