Термин для параметров функции, определенных для общего использования, а не для конкретного - PullRequest
0 голосов
/ 21 ноября 2018

Есть ли термин для этой техники?Одним из ярких примеров является WinAPI: SendMessage( hwnd, msg, info1, info2 ), где параметры # 3 и # 4 имеют смысл только для msg (что также означает, что существуют случаи, когда требуется только один или ни один из этих двух параметров). См. MSDN .

Перефразировано: имеется универсальная функция, которая всегда принимает несколько аргументов, но их интерпретация зависит от предыдущего аргумента.Я не хочу говорить об открытых массивах, открытых аргументах, типизированных аргументах ... Я все это знаю.Это не то, что я спрашиваю - я хочу иметь термин для этого типа функций (любой может быть также, как называются неопределенные параметры).


Это не о приведениях или передаче по ссылке -Типы параметров всегда одинаковы.Другой пример: calculate( char operation, int a, int b ), который затем используется как

  1. calculate( '+', 2, 5 ) (параметры # 2 и # 3 являются слагаемыми)
  2. calculate( '/', 4, 2 ) (параметр # 2 является делителем ипараметр # 3 - это делитель)
  3. calculate( '!', 3, 0 ) (параметр # 2 - это факториал, а параметр # 3 не используется)

Во всех этих случаях тип данных всегда одинакови никогда не кастировал.Но значение параметров № 2 и № 3 различается в зависимости от параметра № 1.И поскольку это так, трудно дать этим параметрам осмысленное имя. Конечно, сама функция, скорее всего, использует switch () , но это не является предметом моего вопроса.Как называются параметры # 2 и # 3, когда невозможно найти отдельное имя, но типы данных всегда одинаковы?

Ответы [ 3 ]

0 голосов
/ 03 декабря 2018

Факт, что аргумент msg «меняет» параметры, заключается в простом выражении switch.Каждая «msg» в коммутаторе знает необходимые параметры (с типом) и соответствующим образом приводит их в соответствие.

Этот " метод " называется передачей по ссылке или передачей по адресу.Последний обычно используется для указателей метода.

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

Ссылочная функция является API-функцией Win32, которую можно назвать «вызовом функции Windows».

0 голосов
/ 05 декабря 2018

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

Процитировать википедию по зависимым типам

"Пара целых чисел" - это тип.«Пара целых чисел, где второе больше первого» является зависимым типом из-за зависимости от значения.

Параметры могут иметь тип, который зависит от значения.Тип info1 зависит от значения msg, как и info2.

Чтобы этот подход работал на языке без зависимых типов, зависимым параметрам присваивается очень общий тип, которыйуточняется позже, когда появляется больше информации.Когда тип msg становится известным (во время выполнения) только тогда, принимаются типы info1 и info2.Хотя язык не позволяет вам выразить эту зависимость, я все равно назвал бы подход зависимым типом.

0 голосов
/ 01 декабря 2018

Это пример статического параметра и нескольких динамических параметров.Статическим является «msg», а динамика описывается следующим образом:

Эти параметры являются общими указателями.Передано по ссылке.Они могут указывать на любой тип данных или не иметь значения, то есть нулевой указатель.Отправитель должен заблокировать память на месте, а метод получения - правильно интерпретировать указатель (посредством приведения указателя).

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

Это было распространено до C ++, вдни C, у нас были только структуры C, чтобы обойти.Приводит ко многим общим ошибкам защиты от ошибок.С тех пор типизированные интерфейсы в основном заменили общие эквиваленты через библиотеки.Но основные методы Win32 остаются прежними.Основным существенным изменением с момента его создания является принятие 64-битных указателей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...