2011-07-10 30 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

当你知道你要使用的类型时,通常你会重载一个函数。

通常当你使用的类型之间存在实际的逻辑差异(不同的代码)时,你会重载一个函数。
你可以这样做,因为你知道实际的类型和他们的特征。

模板的强大之处在于,您可以将函数写入一次,然后使用该方法获取所需的任何类型。
但模板应该足够一般,以适应给它的任何类型。

相关问题