Klassentemplates

friends und Klassentemplates (2/2)

Zur Verdeutlichung einige Beispiele

 
  class normale_klasse {};  
  template <class T> class testklasse;  
  template <class T> class template_klasse { };  
  template <class T> class zweite_template_klasse { public: void(f); }; 

void normale_funktion(); template <class T> void template_funktion(testklasse<T> x);

template <class T> class testklasse { friend normale_klasse; // Das kennen wir schon friend template_klasse<T>; // 1-1-Beziehung: Nur korrespondierende Klasse friend zweite_template_klasse<T>::f(); // 1-1-Beziehung, aber nur f() befreundet friend normale_funktion(); // Das kennen wir auch friend template_funktion(testklasse<T>); // 1-1-Beziehung: Nur für selben Typ erlaubt

template <class U> friend template_klasse<U>; // 1-viele-Beziehung: alle template_klasse<U> // sind für beliebiges U befreundet template <class U> friend zweite_template_klasse<U>::f(); // analog

template <class U> friend template_funktion(testklasse<U>); // analog