Statisk sändning
Polymorfism |
---|
Ad hoc polymorfism |
Parametrisk polymorfism |
Subtyping |
Inom datorer är statisk utsändning en form av polymorfism som helt lösts under kompileringstiden . Det är en form av metodutskick, som beskriver hur ett språk eller en miljö väljer vilken implementering av en metod eller funktion som ska användas.
Exempel är mallar i C++ och generisk programmering på andra språk, i samband med funktionsöverbelastning (inklusive operatörsöverbelastning) . Koden sägs vara monomorfiserad , med specifika datatyper härledda och spårade genom anropsdiagrammet , för att instansiera specifika versioner av generiska funktioner och välja specifika funktionsanrop baserat på de angivna definitionerna.
Detta står i kontrast till dynamisk utskick , som är baserad på körtidsinformation (som vtable- pekare och andra former av information om körtidstyp).
Statisk sändning är möjlig eftersom det finns en garanti för att det bara någonsin finns en enda implementering av metoden i fråga. Statisk sändning är vanligtvis snabbare än dynamisk sändning som av naturen har högre omkostnader.
Exempel i Rust
I Rust .
egenskap Tala { fn tala ( & själv ); } struct Cat ; impl Speak for Cat { fn speak ( & self ) { println! ( "Mjau!" ); } } fn talk < T : Speak > ( pet : T ) { pet . tala (); } fn main () { låt husdjur = Katt ; prata ( husdjur ); }
Rust kommer att monomorfiera detta när det sammanställs till:
fn talk_cat ( husdjur : katt ) { husdjur . tala (); }
Se även