Curiously Recurring Template Pattern
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]
- ↑ William Cook: F-Bounded Polymorphism for Object-Oriented Programming, 1989
- ↑ Coplien, James O. (February 1995). „Curiously Recurring Template Patterns”. C++ Report, 24–27. o.
- ↑ Budd, Timothy. Multiparadigm programming in Leda. Addison-Wesley (1994). ISBN 0-201-82080-3
- ↑ 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.)
- ↑ 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.)
- ↑ Alexandrescu, Andrei. Modern C++ Design: Generic Programming and Design Patterns Applied. Addison-Wesley (2001). ISBN 0-201-70431-5
- ↑ Lean Architecture: for agile software development. Wiley (2010). ISBN 0-470-68420-8