dispatch table
Megjelenés
Főnév
dispatch table (tsz. dispatch tables)
- (informatika) A dispatch table egy olyan adatstruktúra, amely függvényekhez társít azonosítókat vagy kulcsokat, és lehetővé teszi, hogy a program futás közben dinamikusan válassza ki, melyik függvényt hívja meg.
Leggyakrabban objektumorientált programozásban (OOP) használják késői kötés (late binding) megvalósítására, de nem csak OOP-ben fordul elő.
🧠 Összefoglalás dióhéjban
| Fogalom | Jelentés |
|---|---|
| Dispatch Table | Táblázat, amely függvényeket tárol |
| Használat célja | Dinamikus függvényhívás futásidőben |
| Leggyakoribb forma | VTable (virtuális függvénytábla C++-ban) |
| Alapelve | Egy mutató → megfelelő függvényhívás |
📦 Példa – C++: Virtuális függvénytábla (vtable)
#include <iostream>
using namespace std;
class Alap {
public:
virtual void hello() { cout << "Alap::hello()\n"; }
};
class Szarmaztatott : public Alap {
public:
void hello() override { cout << "Szarmaztatott::hello()\n"; }
};
int main() {
Alap* p = new Szarmaztatott();
p->hello(); // Futásidőben a dispatch table (vtable) dönti el
delete p;
}
Itt a p->hello() nem fordításkor, hanem futásidőben kerül eldöntésre. A fordító egy mutatót helyez el a vtable-re, és ezen keresztül éri el a megfelelő függvényt. Ez a dispatch table.
🧰 Általános C-stílusú példa (kézzel épített dispatch tábla)
#include <stdio.h>
void start() { printf("Start selected\n"); }
void stop() { printf("Stop selected\n"); }
typedef void (*CommandFunc)();
int main() {
CommandFunc table[2] = {start, stop};
int choice = 1; // dinamikusan kiválasztott függvény
table[choice](); // Meghívja: stop()
return 0;
}
Ez a példában table a dispatch table. Index alapján választjuk ki a megfelelő függvényt.
🧩 Alkalmazási területek
- Virtuális függvények (OOP): minden példány
vtable-t használ - Állapotgépek (state machine): az aktuális állapot határozza meg, melyik függvény aktiválódik
- Interfészek implementálása dinamikusan: pl. COM (Component Object Model) rendszerek
- Parancsértelmezők: utasításnevek → végrehajtó függvények
⚙️ Előnyök és hátrányok
✅ Előnyök:
- Rugalmasság: dinamikusan kiválasztható függvény
- Kód tisztasága: elkerülhetők a sok
switchvagyifszerkezet - Polimorfizmus alapja: különösen OOP nyelvekben
❌ Hátrányok:
- Lassabb: egy extra indirekciós lépést igényel
- Nehezebb hibakeresés: nem mindig egyértelmű, melyik függvény hívódik meg
- Memóriaköltség: extra mutatótáblák
🔍 Belső működés (vtable C++-ban)
- A fordító minden virtuális osztályhoz létrehoz egy táblát (
vtable) - Minden objektumhoz tartozik egy vtable mutató (
vptr) - A
vptraz objektum példányában tárolódik - Függvényhíváskor →
vptr→vtable→ megfelelő függvényhívás
🧠 TL;DR
- A dispatch table egy struktúra, amelyben kulcsokhoz függvények vannak rendelve
- Segítségével dinamikusan választhatunk függvényeket futásidőben
- C++-ban ez az alapja a virtuális függvényeknek →
vtable - Használható kézzel is:
function pointer array,map<string, function<>>, stb.
- dispatch table - Szótár.net (en-hu)
- dispatch table - Sztaki (en-hu)
- dispatch table - Merriam–Webster
- dispatch table - Cambridge
- dispatch table - WordNet
- dispatch table - Яндекс (en-ru)
- dispatch table - Google (en-hu)
- dispatch table - Wikidata
- dispatch table - Wikipédia (angol)