logo
volkov / C++ / Бьерн Страуструп-Справочное руководство по С++

R.14.6 Функции-члены шаблонов типа

Функция-член шаблонного класса считается неявной шаблонной функцией,

а параметры шаблона типа для ее класса - ее шаблонными параметрами.

Приведем пример, в котором описаны три шаблона типа для функции:

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[]()