Podręcznik

2. Szablony klas

2.6. Typy stowarzyszone

W klasach poza metodami i polami możemy definiować również typy, które będziemy nazywali stowarzyszonymi z daną klasą. Jest to szczególnie przydatne w przypadku szablonów. Rozważmy następujący przykład:


template<typename T, template<typename X > class Sequence=std::deque > class TCStos {
    ...
public:
    typedef T value_type;
    ...
};

Możemy teraz używać jej w innych szablonach:


template<typename S> void f(S s) {
    typename S::value_type total = 0;
    // słowo typename jest wymagane, inaczej kompilator założy, że
    // S::value_type odnosi się do statycznej składowej klasy
    while(!s.is_empty() ) {
        total+=s.pop();
    }
    return total;
}

Bez takich możliwości musielibyśmy przekazać typ elementów stosu w osobnym argumencie. Mechanizm typów stowarzyszonych jest bardzo często używany w uogólnionym kodzie.