Middle+
C++-də statik çox formallığın ifadəsi necə adlanır?
sobes.tech Süni İntellekt
AI-dan cavab
Maraqlı dərəcədə təkrarlanan şablon nümunəsi (CRTP), həmçinin statik çox biçimlilik və ya tərtib zamanı çox biçimlilik kimi də tanınır.
CRTP prinsipi, Base şablon sinfinin özünü şablon parametri kimi istifadə etməsinə əsaslanır və eyni zamanda Derived adlı törəmə sinf üçün əsas sinfdir.
template <typename T>
class Base
{
public:
void interfaceMethod()
{
// 'implementationMethod' metodunun statik çağırışı
// T tipində obyekt üzərində
static_cast<T*>(this)->implementationMethod();
}
// Burada virtual metod lazım deyil
};
class Derived : public Base<Derived>
{
public:
void implementationMethod()
{
// Derived üçün spesifik implementasiya
// ...
}
};
CRTP-nin dinamik çox biçimliliklə müqayisəsi:
- Performans: Funksiya çağırışları statik və tərtib zamanı həll olunur, virtual cədvəlin əlavə xərclərindən qaçınır.
- Virtual funksiyalar üçün əlavə xərclər yoxdur: vptr/vtbl saxlamaq və ya istifadə etmək lazım deyil.
- Daha sərt tip yoxlaması: Növlər arasındakı uyğunsuzluq və ya implementasiya çatışmazlığı tərtib zamanı aşkarlanır.
Əksikliklər:
- Törəmənin növünü bilmək lazımdır: Base sinfi şablon olmalı və törəmənin növünü "bilməlidir".
- Başlayanlar üçün mürəkkəblik: Bu nümunə ənənəvi irsiyyət və virtual funksiyalar ilə müqayisədə daha az intuitiv ola bilər.
- Fərqli CRTP növlərinin kolleksiyaları ilə işləmək mümkün deyil: Fərqli törəmə CRTP sinflərinin obyektləri tək konteynerdə saxlana bilməz və onlara əsas göstərici və ya istinad vasitəsilə müraciət edilə bilməz.
Dinamik çox biçimliliklə müqayisə:
| Aspect | CRTP (statik çox biçimlilik) | Dinamik çox biçimlilik (virtual funksiyalar) |
|---|---|---|
| Çağırışın həll olunması | Tərtib zamanı | İcranın vaxtı |
| Performans | Daha yüksək (vtbl xərcləri yox) | Aşağı (vtbl xərcləri ilə) |
| Əlavə xərclər | Vptr/vtbl yox | Vptr/vtbl ilə |
| Elastiklik (kolleksiyalar) | Yox (fərqli tiplərlə işləmək mümkün deyil) | Bəli (fərqli tiplərlə işləmək mümkündür) |
| Xəta aşkarlanması | Tərtib zamanı | İcranın vaxtı |
| Mürəkkəblik | Başlayanlar üçün daha yüksək | Başlayanlar üçün daha aşağı |