ホームページ >バックエンド開発 >C++ >クラステンプレートのメンバー関数を明示的に特殊化するにはどうすればよいですか?

クラステンプレートのメンバー関数を明示的に特殊化するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-07 15:13:11977ブラウズ

How to Explicitly Specialize a Member Function of a Class Template?

クラス テンプレートのメンバー関数の明示的な特殊化

問題ステートメント:

の場合クラス テンプレートのメンバー関数の明示的な特殊化を定義する場合は、周囲のクラス テンプレートも明示的に特殊化する必要があります。コンパイラ エラーを避けるため。

コード例:

次のコード スニペットを考えてみましょう:

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。