|
|
Функция-член шаблонного класса считается неявной шаблонной функцией, а параметры шаблона типа для ее класса - ее шаблонными параметрами. Приведем пример, в котором описаны три шаблона типа для функции:
template<class T> class vector { T* v; int sz; public: vector(int); T& operator[](int); T& elem(int i) { return v[i]; } // ... };
Функцию, выполняющую индексацию, можно определить следующим образом:
template<class T> T& vector<T>::operator[](int i) { if (i<0 || sz>=i) error("vector: range error"); return v[i]; }
Шаблонный параметр для vector<T>::operator[]() будет задаваться тем типом vector, к которому применяется операция индексации.
vector<int> v1(20); vector<complex> v2(30); v1[3] = 7; // vector<int>::operator[]() v2[3] = complex(7,8); // vector<complex>::operator[]()
| |