Перегрузка
https://www.angelcode.com/angelscript/sdk/docs/manual/doc_script_func_overload.html
Объявление нескольких функций в одном пространстве имён с одинаковым именем и различным набором аргументов называется перегрузкой функции.
Перегрузки размечаются на этапе компиляции и компилятор пытается найти самую подходящую функцию для вызова основываясь на типах параметров. Тип возвращаемого значения не влияет на выбор функции.
Приведение типов
При передаче аргумента в функцию происходит неявное приведение типов:
При выборе подходящей функции происходит подсчёт стоимости преобразования каждого аргумента. Если по итогу окажется две функции с одинаковой стоимостью, то будет сгенерирована ошибка.
const
Стоимость const
учитывается при расчёте, но при идентичных типах приводит к неоднозначности.
Ссылки
Ссылки учитываются при расчёте, но при идентичных типах приводят к неоднозначности.
Числа
Все числа совместимы. В некоторых случаях с потерей байт или изменением значения.
Преобразования происходят в следующем порядке.
Преобразование | Пример |
---|---|
Перечисление в целое число того же размера |
|
Перечисление в целое число другого размера |
|
Увеличение размерности числа |
|
Уменьшение размерности числа |
|
Знаковое целое в беззнаковое |
|
Беззнаковое целое в знаковое |
|
Целочисленное в вещественное |
|
Вещественное в целочисленное |
|
Преобразования происходят последовательно, ниже приведено несколько примеров.
Цель преобразования | Цепочка преобразования |
---|---|
|
|
|
|
|
|
|
|
Поиск функции
После нахождения всех подходящих функций для каждой позиции аргумента будет построен список подходящих функций. Возьмём для примера несколько функций:
|
|
| ➡ |
---|---|---|---|
|
|
| 1 |
|
|
| 3 |
❌ |
|
| ❌ |
Наименьшее количество преобразований имеет I
, он и будет вызван.
|
|
| ➡ |
---|---|---|---|
|
|
| 3 |
|
|
| 3 |
❌ |
|
| ❌ |
Две функции с одинаковым количеством преобразований приведут к неоднозначности и будет сгенерирована ошибка.