Когда следует использовать шаблоны и когда перегружены функции? - PullRequest
1 голос
/ 10 июля 2011

Я в замешательстве.Кажется, я никогда не решаю, что использовать: шаблон или перегруженную функцию.Перегрузки требуют большего кодирования.Так в каких случаях предпочтительнее использовать шаблоны и в каких перегруженных функциях?

Например, недавно мне пришлось принять это решение при создании маленькой игры GBA.Было два типа u16 и int , и я решил использовать перегруженные функции.И в каких случаях я должен использовать перегруженную функцию?

Ответы [ 3 ]

8 голосов
/ 10 июля 2011

Основное правило должно быть:

Используйте Шаблоны , если вы хотите выполнить те же функции / Операции над различными типами данных .

Используйте перегруженные функции , когда вы хотите выполнить различные функции / Операции над различные / одинаковые типы данных

Кроме того, хороший показатель того, когда вам действительно нужна перегруженная функция над шаблоном, - это когда вы делаете слишком много явных специализаций для шаблонной версии функции.

В вашем примере, если вы выполняете одинаковые операции в обеих версиях функций, вы должны использовать шаблоны, иначе вы должны использовать перегруженную функцию.

3 голосов
/ 10 июля 2011

Насколько я вижу, шаблонное решение привело бы к тому же скомпилированному объекту, но без повторений в источнике. Явный выигрыш для шаблонов.

Я не понимаю смысла в том, что шаблонам нужно больше памяти. Это звучит как неправильное мышление.

1 голос
/ 10 июля 2011

Обычно вы перегружаете функцию, когда знаете типы, которые собираетесь использовать.

Обычно вы перегружаете функцию, когда есть реальная логическая разница (другой код) между типами, которые вы используете.
И вы можете сделать это, потому что вы знаете фактические типы и их черты.

Сила шаблонов заключается в том, что вы можете написать функцию один раз, а затем использовать метод для любого типа.
Но шаблон должен быть достаточно общим, чтобы соответствовать любому типу, данному ему.

...