C++ 何时应该使用模板以及何时重载函数?

C++ 何时应该使用模板以及何时重载函数?,c++,oop,templates,programming-languages,C++,Oop,Templates,Programming Languages,我很困惑。我似乎从未决定使用什么,模板还是重载函数。重载需要更多的编码。那么在什么情况下最好使用模板,在什么样的重载函数中 例如,我最近不得不在进行一场小型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; } 我

我很困惑。我似乎从未决定使用什么,模板还是重载函数。重载需要更多的编码。那么在什么情况下最好使用模板,在什么样的重载函数中

例如,我最近不得不在进行一场小型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; }

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

据我所知,模板解决方案会导致相同的编译对象,但不会在源代码中重复。模板的明显优势


我不明白模板需要更多内存的意义。这听起来像是一个错误的想法。

据我所知,模板解决方案会导致相同的编译对象,但不会在源代码中重复。模板的明显优势

我不明白模板需要更多内存的意义。这听起来像是一个错误的想法。

基本规则应该是:

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

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

另外,当您确实需要重载函数而不是模板时,一个很好的度量方法是为模板化版本的函数进行过多的显式专门化

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

基本规则应为:

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

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

另外,当您确实需要重载函数而不是模板时,一个很好的度量方法是为模板化版本的函数进行过多的显式专门化


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

通常,当您知道要使用的类型时,会重载函数

通常,当所使用的类型之间存在实际的逻辑差异时,您将重载函数。 你可以这样做,因为你知道真正的类型和他们的特点

模板的强大之处在于,您可以将函数编写一次,然后将该方法用于您想要的任何类型。
但是模板应该足够通用,以适合给定给它的任何类型。

通常,当您知道要使用的类型时,您会重载函数

通常,当所使用的类型之间存在实际的逻辑差异时,您将重载函数。 你可以这样做,因为你知道真正的类型和他们的特点

模板的强大之处在于,您可以将函数编写一次,然后将该方法用于您想要的任何类型。
但是模板应该足够通用,以适合任何类型的模板。

这就是我通过阅读论坛得到的混乱的虚假信息。模板需要更多的内存!!!而且模板很慢!!!和模板相比有很多东西,反之亦然。很抱歉,我认为使用模板会让编译器的日子很难过。也许这就是内存/慢速振动产生的原因。模板并不慢,因为在编译时,它们被转换成特定类型。使用模板时,编译时可能会慢一些。关于内存:如果从模板创建3个具体函数,则需要3个*函数副本。如果你重载3个函数,你也有3个拷贝,所以内存使用是一样的。而且,在大多数情况下,它都可以被忽略,这是我通过阅读论坛得到的混乱的虚假信息。模板需要更多的内存!!!而且模板很慢!!!和模板相比有很多东西,反之亦然。很抱歉,我认为使用模板会让编译器的日子很难过。也许这就是内存/慢速振动产生的原因。模板并不慢,因为在编译时,它们被转换成特定类型。使用模板时,编译时可能会慢一些。关于内存:如果从模板创建3个具体函数,则需要3个*函数副本。如果你重载3个函数,你也有3个拷贝,所以内存使用是一样的。无论如何,在大多数情况下,它都可以被忽略+1@Als他是说你有很多粗体字我能不能用粗体字+1@Als他是说你有很多粗体字