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.