Информатика. Общая информатика. Основы языка C++. Мамонова Т.Е. - 98 стр.

UptoLike

Составители: 

обобщённая функция сравнивает значения типа-параметра, любой кон-
кретный тип, использованный в ней, должен поддерживать операции
сравнения, если присваивает значения типа-параметра переменным
конкретный тип должен обеспечивать корректное присваивание.
3.7.2. Способы реализации
Известно два основных способа реализации поддержки обобщённо-
го программирования в компиляторе.
Порождение нового кода для каждой конкретизации. В этом вари-
анте компилятор рассматривает обобщённое описание как текстовый
шаблон для создания вариантов конкретизаций. Когда компилятору тре-
буется новая конкретизация обобщённого типа или процедуры, он со-
здаёт новый экземпляр типа или процедуры, чисто механически добав-
ляя туда тип-параметр. То есть, имея обобщённую функцию перестанов-
ки элементов, компилятор, встретив её вызов для целого типа, создаст
функцию перестановки целых чисел и подставит в код её вызов, а затем,
встретив вызов для строкового типа – создаст функцию перестановки
строк, никак не связанную с первой. Этот метод обеспечивает макси-
мальное быстродействие, поскольку варианты конкретизаций становят-
ся разными фрагментами программы, каждый из них может быть опти-
мизирован для своего типа-параметра, к тому же в код не включаются
никакие лишние элементы, связанные с проверкой или преобразованием
типов на этапе исполнения программы. Недостатком его является то,
что при активном использовании обобщённых типов и функций с раз-
личными типами-параметрами размер откомпилированной программы
может очень сильно возрастать, поскольку даже для тех фрагментов
описания, которые для разных типов не различаются, компилятор всё
равно генерирует отдельный код. Этот недостаток можно затушевать
путём частичной генерации общего кода (часть обобщённого описания,
которая не зависит от типов-параметров, оформляется специальным об-
разом и по ней компилятор генерирует единый для всех конкретизаций
код). Зато данный механизм даёт естественную возможность создания
специальных (обычно сильно вручную оптимизированных) конкрети-
заций обобщённых типов и функций для некоторых типов-параметров.
Порождение кода, который во время исполнения выполняет
преобразование фактических параметров-типов к одному типу, с кото-
рым фактически и работает. В этом случае на этапе компиляции про-
граммы компилятор лишь проверяет соответствие типов и включает в
код команды преобразования конкретного типа-параметра к общему
типу. Код, определяющий функционирование обобщённого типа или
функции, имеется в откомпилированной программе в единственном эк-
98