Statisk sändning

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