c++ - 什么时候应该使用模板,什么时候重载函数?

标签 c++ oop templates programming-languages

我很困惑。我似乎从来没有决定使用什么,模板还是重载函数。重载需要更多编码。那么在什么情况下更喜欢使用模板以及在什么重载函数中?

例如,我最近在制作一款小型 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; }

我应该改用模板吗?在什么情况下我应该使用重载函数?

最佳答案

基本规则应该是:

如果您想对不同的数据类型执行相同的功能/操作,请使用模板

如果您想对不同/相同的数据类型执行不同的功能/操作,请使用重载函数

此外,当您真正需要重载函数而不是模板时,一个很好的衡量标准是您是否为函数的模板版本进行了过多的显式特化。

在您的示例中,如果您在函数的两个版本中执行相同的操作,则应使用模板,否则应使用重载函数。

关于c++ - 什么时候应该使用模板,什么时候重载函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6640005/

相关文章:

c++ - 在 C++ 中将函数作为参数执行

c++ - 这个指向基类构造函数的指针?

c++ - 非 POD 类型的复制构造函数和普通构造函数

oop - Crystal - 如何在父类的子类之间共享属性和/或类型

java - 在java中扩展类并实现接口(interface)

c++ - 在编译时确保 C++ 数组参数大小

c++ - 遍历列表 vector

c++ - Qt:使用另一个参数创建一个新类

C++ 组合最佳实践

c++ - 如何在专门针对无参数的可变参数模板类的声明之外定义 C++ 方法?