17 Templates [temp]

17.5 Template declarations [temp.decls]

17.5.1 Class templates [temp.class]

17.5.1.1 Member functions of class templates [temp.mem.func]

Функция-член шаблона класса может быть определена вне определения шаблона класса, в котором она объявлена. [Example:

template<class T> class Array {
  T* v;
  int sz;
public:
  explicit Array(int);
  T& operator[](int);
  T& elem(int i) { return v[i]; }
};

объявляет три шаблона функций. Функция индекса может быть определена следующим образом:

template<class T> T& Array<T>::operator[](int i) {
  if (i<0 || sz<=i) error("Array: range error");
  return v[i];
}

end example]

Для template-arguments функции-члена шаблона класса определяется template-arguments тип объекта, для которого вызывается функция-член. [ Для будет определяться , к которому применяется операция индексации.Example: template-argumentArray<T>​::​operator[]()Array

Array<int> v1(20);
Array<dcomplex> v2(30);

v1[3] = 7;                      // Array<int>​::​operator[]()
v2[3] = dcomplex(7,8);          // Array<dcomplex>​::​operator[]()

end example]