テンプレートのメンバー関数を、そのクラス・テンプレート定義の外側に定義できます。
クラス・テンプレート特殊化のメンバー関数を呼び出す場合、 コンパイラーは、以前、クラス・テンプレートの作成に使用したテンプレート引き数を使用します。 次の例は、このことを示しています。
template<class T> class X { public: T operator+(T); }; template<class T> T X<T>::operator+(T arg1) { return arg1; }; int main() { X<char> a; X<int> b; a +'z'; b + 4; }
多重定義された加法演算子は、クラス X の外側で定義されています。 ステートメント a + 'z' は、a.operator+('z') と同等です。 ステートメント b + 4 は、b.operator+(4) と同等です。
関連参照