Стол отгрузки
В информатике таблица диспетчеризации представляет собой таблицу указателей или адресов памяти для функций или методов . [1] Использование такой таблицы — распространенный метод при реализации позднего связывания в объектно-ориентированном программировании .
Perl-реализация
[ редактировать ]Ниже показан один из способов реализации таблицы диспетчеризации в Perl с использованием хеша для хранения ссылок на код (также известный как указатели функций ).
# Define the table using one anonymous code-ref and one named code-ref
my %dispatch = (
"-h" => sub { return "hello\n"; },
"-g" => \&say_goodbye
);
sub say_goodbye {
return "goodbye\n";
}
# Fetch the code ref from the table, and invoke it
my $sub = $dispatch{$ARGV[0]};
print $sub ? $sub->() : "unknown argument\n";
Запуск этой программы Perl как perl greet -h
выдаст «привет» и запустит его как perl greet -g
произведет «до свидания».
Реализация JavaScript
[ редактировать ]Ниже приведена демонстрация реализации таблицы отправки в JavaScript:
var thingsWeCanDo = {
doThisThing : function() { /* behavior */ },
doThatThing : function() { /* behavior */ },
doThisOtherThing : function() { /* behavior */ },
default : function() { /* behavior */ }
};
var doSomething = function(doWhat) {
var thingToDo = thingsWeCanDo.hasOwnProperty(doWhat) ? doWhat : "default"
thingsWeCanDo[thingToDo]();
}
Таблицы виртуальных методов
[ редактировать ]В объектно-ориентированных языках программирования , поддерживающих виртуальные методы , компилятор автоматически создает таблицу диспетчеризации для каждого объекта класса, содержащего виртуальные методы. Эта таблица называется таблицей виртуальных методов или vtable , и каждый вызов виртуального метода отправляется через vtable.
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ Гольдфус, Алиса. «Таблицы диспетчеризации функций в C» . alicegoldfuss.com . Проверено 23 января 2021 г.
- Диомидис Спинеллис (2003). Чтение кода : взгляд на открытый исходный код . Бостон, Массачусетс: Аддисон-Уэсли. ISBN 0-201-79940-5