クラス テンプレートのメンバー関数の明示的な特殊化
問題ステートメント:
の場合クラス テンプレートのメンバー関数の明示的な特殊化を定義する場合は、周囲のクラス テンプレートも明示的に特殊化する必要があります。コンパイラ エラーを避けるため。
コード例:
次のコード スニペットを考えてみましょう:
template <class C> class X { public: template <class T> void get_as(); }; template <class C> void X<C>::get_as<double>() { } int main() { X<int> x; x.get_as(); }
このコードは、周囲のクラスが原因でコンパイラ エラーを引き起こします。テンプレート X は明示的には指定されていません
解決策:
この問題を解決するには、以下に示すように、周囲のクラス テンプレートを明示的に特殊化する必要があります。
template <> template <> void X<int>::get_as<double>() { }
This特殊なメンバー関数は X
代替アプローチ:
代替アプローチは、次のコードに示すように、関数オーバーロードを使用することです:
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>) {} };
このメソッドにより、周囲のクラス テンプレートを特殊化する必要がなく、明示的な特殊化が可能になります。
以上がクラステンプレートのメンバー関数を明示的に特殊化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。