ホームページ  >  記事  >  バックエンド開発  >  C でテンプレートの特殊化を決定するにはどうすればよいですか?

C でテンプレートの特殊化を決定するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-13 06:25:02710ブラウズ

How to Determine Template Specialization in C  ?

テンプレートの特殊化の決定

C では、特定の型が特定のクラス テンプレートの特殊化であるかどうかを確認する必要があることがよくあります。以下の例を考えてみましょう。

template <class T>
struct A {};

CompareT が A<*> であるかどうかをどのように判断できますか。次のコードの type * については?

template<class CompareT>
void compare(){
   // is this A ?
   cout << is_same< A<*>, CompareT >::value;     // A<*> ????
}

int main(){
  compare< A<int> >();
}

たとえば、ここでは A となります。 A と一致する必要があります。 1.

解決策:

これを実現するには、is_specialization と呼ばれるカスタム メタ関数を利用できます:

template <class T, template <class...> class Template>
struct is_specialization : std::false_type {};

template <template <class...> class Template, class... Args>
struct is_specialization<Template<Args...>, Template> : std::true_type {};

このメタ関数は true を返しますT が Template の特殊化である場合、そうでない場合は false。使用法を説明するには:

static_assert(is_specialization<std::vector<int>, std::vector>{}, "");
static_assert(!is_specialization<std::vector<int>, std::list>{}, "");

以上がC でテンプレートの特殊化を決定するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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