2.2 KiB
[temp.mem.func]
13 Templates [temp]
13.7 Template declarations [temp.decls]
13.7.2 Class templates [temp.class]
13.7.2.2 Member functions of class templates [temp.mem.func]
A member function of a class template may be defined outside of the class template definition in which it is declared.
[Example 1: template class Array { T* v; int sz;public:explicit Array(int); T& operator; T& elem(int i) { return v[i]; }};
declares three member functions of a class template.
The subscript function can be defined like this:template T& Array::operator[](int i) {if (i<0 || sz<=i) error("Array: range error"); return v[i];}
A constrained member function can be defined out of line:template concept C = requires {typename T::type;};
template struct S {void f() requires C; void g() requires C;};
templatevoid S::f() requires C { } // OKtemplatevoid S::g() { } // error: no matching function in S
â end example]
Thetemplate-arguments for a member function of a class template are determined by thetemplate-arguments of the type of the object for which the member function is called.
[Example 2:
Thetemplate-argument forArray::operator[] will be determined by theArray to which the subscripting operation is applied.
Array v1(20); Array v2(30);
v1[3] = 7; // Array::operator[] v2[3] = dcomplex(7,8); // Array::operator[] â end example]