wykorzystujemy. W ten sposób można konkretyzować klasę typem, który nie spełnia wszystkich ograniczeń. Wszystko będzie w porządku, dopóki nie będziemy próbowali wykonać operacji odwołujących się do niespełnianych założeń.
Aby poinformować kompilator, że chcemy mieć konkretyzację na żądanie, należy poprzedzić deklarację zmiennej słowem template: template foo<int> variable;
Co to jest CRTP?
Curiously Recurring Template Pattern - idiom programowania uogólnionego. Dziedziczymy z klasy bazowej, której parametrem jest aktualnie definiowana klasa:
template <class T> class Base{
};
class Derived: public Base<Derived>{
} ;
Co to jest polimorfizm statyczny?
Jest to imitacja polimorfizmu wykonywana z użyciem szablonów. Polega na odpowiednim zrzutowaniu typów jeszcze w momencie kompilacji za pomocą schematu CRTP. Przykład:
template <class Derived> struct base {
void interface()
{
static_cast<Derived*>(this)->implementation();
struct derived : base<derived>
{
void implementation();
};
Do czego służy słowo kluczowe „typename”?
Służy do podpowiadania przy deklarowaniu pól klasy, że odwołujemy się do typu składowego innej klasy, a nie np. jej zmiennej statycznej, template Cclass T> class foo
typename T::id x; public:
void func(){ x.g() ; }
7 z 13