Мы только что узнали о перегрузке функций , которые могут обрабатывать несколько типов данных. Хотя они имеют одно и то же имя, их все равно необходимо определять отдельно. Было бы здорово, если бы код можно было упростить и шаблонизировать. С этой целью в C++ предусмотрен механизм шаблонов функций, который значительно повышает возможность повторного использования кода.
Шаблон функции позволяет создать общую функцию, поддерживающую несколько формальных параметров. Используйте шаблон ключевого слова, чтобы определить его в следующей форме:
template<имя типа класса 1, имя типа класса 2...> возвращаемое значение имя функции (столбец списка формальных параметров) список параметров шаблона {тело функции}
В этой общей форме шаблон в первой строке <имя типа класса 1, имя типа класса 2...> представляет собой оператор объявления . Шаблон — это ключевое слово, определяющее функцию шаблона. В функции может быть несколько типов. угловые скобки. Предыдущие — Использовать класс (или имя типа для определения). Затем добавьте к нему определенный шаблон функции. Не забывайте добавлять другие операторы в середине, иначе будет выдано сообщение об ошибке!
Ниже давайте рассмотрим конкретный пример!
#include<iostream>usingnamespacestd;template<classT1,classT2>T1add(T1x,T2y){cout<<sizeof(T1)<<,<<sizeof(T2)<<t;returnx+y;}intmain(){ cout<<add(10,20)<<endl;;cout<<add(3.14,5.98)<<endl;cout<<add('A',2)<<endl;return0;}
Выше приведен шаблон функции сложения. Вы можете видеть, что мы определили шаблон функции сложения, и типы переменных в нем заменены на T1 и T2.
В основной функции, когда мы ее вызываем, мы вызываем ее три раза, передавая три разных типа. Типы T1 и T2 в шаблонной функции будут изменены на определенные типы в соответствии с фактическим переданным типом. Это преобразование называется. экземпляр изменения шаблона.
Затем запускаем программу и видим, какие типы T1 и T2 вызываются каждый раз, сколько они байт и результат суммирования. Эффект от бега следующий:
Вы можете разобраться в коде построчно и завершить эксперимент самостоятельно.