Ugrás a tartalomhoz

Curiously Recurring Template Pattern

A Wikipédiából, a szabad enciklopédiából
A lap korábbi változatát látod, amilyen Szalakóta (vitalap | szerkesztései) 2017. május 5., 12:49-kor történt szerkesztése után volt. Ez a változat jelentősen eltérhet az aktuális változattól. (Új oldal, tartalma: „A '''curiously recurring template pattern (CRTP)''' egy sablonokat használó programnyelvi kifejezés. Azt jelenti, hogy egy ''X'' osztály egy ''X'' paraméterű sabl…”)
(eltér) ← Régebbi változat | Aktuális változat (eltér) | Újabb változat→ (eltér)

A curiously recurring template pattern (CRTP) egy sablonokat használó programnyelvi kifejezés. Azt jelenti, hogy egy X osztály egy X paraméterű sablonpéldányosításból származik. Általánosabban F-korlátos polimorfizmusként is ismert. Eredetileg [C++]] nyelven használták, de megvalósítható más nyelveken is.

Története

A technikát az 1980-as években formalizálták F-korlátos minősítésként.[1] Ettől függetlenül a CRTP nevet Jim Coplien adta 1995-ben, aki C++ sablon kódokban találta meg.[2] Továbbá a Timothy Budd által a Leda programozási nyelvhez készített programmintákban is felfedezte.[3] Néha fel-le öröklésként is emlegetik, mivel lehetővé teszi az osztályhierarchiák bővítését különböző bázisosztályok helyettesítésével.[4][5]

Általános formája

// The Curiously Recurring Template Pattern (CRTP)
template<class T>
class Base
{
    // methods within Base can use template to access members of Derived
};
class Derived : public Base<Derived>
{
    // ...
};

A minta használati esetei különböző metaprogramozási módszerek, például a statikus polimorfizmus, vagy amelyekről Andrei Alexandrescu írt a Modern C++ Designban.[6] Emellett az adat, környezet és viselkedés paradigmának C++ megvalósítása is többször használja.[7]

  1. William Cook: F-Bounded Polymorphism for Object-Oriented Programming, 1989
  2. Coplien, James O. (February 1995). „Curiously Recurring Template Patterns”. C++ Report, 24–27. o. 
  3. Budd, Timothy. Multiparadigm programming in Leda. Addison-Wesley (1994). ISBN 0-201-82080-3 
  4. Apostate Café: ATL and Upside-Down Inheritance, 2006. március 15. [2006. március 15-i dátummal az eredetiből archiválva]. (Hozzáférés: 2016. október 9.)
  5. ATL and Upside-Down Inheritance, 2003. június 4. [2003. június 4-i dátummal az eredetiből archiválva]. (Hozzáférés: 2016. október 9.)
  6. Alexandrescu, Andrei. Modern C++ Design: Generic Programming and Design Patterns Applied. Addison-Wesley (2001). ISBN 0-201-70431-5 
  7. Lean Architecture: for agile software development. Wiley (2010). ISBN 0-470-68420-8