Обобщённое программирование — парадигма программирования, заключающаяся в таком описании данных и алгоритмов, которое можно применять к различным типам данных, не меняя само это описание.
Язык С++ -- это компилируемый язык со строгой типизацией, поэтому на этапе выполнения у него нет гибкости интерпретируемых языков, таких как Python, и у каждой функции должны быть строго определённые типы формальных параметров.
Для того, чтобы не писать много раз повторяющиеся почти дословно описания классов и функций в язык С++ введен механизм шаблонов функций и шаблонов классов.
Конкретная функция или класс, получаемый по этому шаблону на этапе компиляции, называется специализацией.
А сам этап компиляции, на котором происходит порождение специализации по шаблону называется инстанцированием.