我很困惑。我似乎永远不会决定使用什么,模板或重载功能。过载需要更多编码。那么在什么情况下首选使用模板和什么重载函数?
例如,我最近不得不在制作小型GBA游戏时做出这个决定。有两种类型 u16 和 int ,我决定使用重载函数。
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; }
我应该使用模板吗?在什么情况下我应该使用重载函数?
答案 0 :(得分:8)
基本规则应该是:
如果要在不同数据类型上执行相同功能/操作,请使用模板。
在不同/相同数据类型
上执行不同功能/操作时,使用重载功能此外,当你真正需要一个重载函数而不是模板时,很好的衡量标准是当你为一个模板化的函数版本制作太多明确的特化时。
在你的例子中,如果你在两个版本的函数中执行相同的操作,你应该使用模板,否则你应该使用重载函数。
答案 1 :(得分:3)
据我所知,模板解决方案会导致相同的编译对象,但源中不会重复。模板的明显胜利。
我不明白模板需要更多内存的重点。这听起来像个傻瓜。
答案 2 :(得分:1)
通常在知道要使用的类型时会重载函数。
通常,当您使用的类型之间存在实际的逻辑差异(不同的代码)时,您将重载函数。
你可以这样做,因为你知道实际的类型和特征。
模板的强大之处在于您可以将其编写一次,然后将该方法用于您想要的任何类型 但是模板应该足够通用,以适应任何给定的类型。