クラス テンプレートのメンバー関数の明示的な特殊化
クラス テンプレートのメンバー関数の明示的な特殊化では、周囲のクラス テンプレートを明示的に特殊化する必要があります専門的にも。質問の元のコードは、X
この問題を解決するには、以下に示すように、クラス テンプレートとメンバー関数の両方を明示的に特殊化できます。
template <> template <> void X<int>::get_as<double>() { }
このアプローチは get_as
周囲のクラス テンプレートを特殊化しないままにする場合は、代替手法を使用できます。このような方法の 1 つは、次の図に示すようにオーバーロードを使用することです。
template <class C> class X { template<typename T> struct type { }; public: template <class T> void get_as() { get_as(type<T>()); } private: template<typename T> void get_as(type<T>) { } void get_as(type<double>) { } };
このアプローチでは、get_as() 関数が 2 つのバージョンでオーバーロードされます。1 つは汎用引数を取るバージョン、もう 1 つは double の場合を特別に処理するバージョンです。これにより、周囲のクラス テンプレートの特殊化を必要とせずに、メンバー関数の明示的な特殊化が可能になります。
以上がクラス テンプレートでメンバー関数を明示的に特殊化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。