クラスは C のテンプレート特化ですか?

DDD
リリース: 2024-11-13 04:17:02
オリジナル
727 人が閲覧しました

Is a Class a Template Specialization in C  ?

クラスはテンプレートの特殊化ですか?

C では、指定された型が特定の型の特殊化であるかどうかを判断すると便利です。クラステンプレート。たとえば、次のコードを考えてみましょう。

template<class T>
struct A {};

template<class CompareT>
void compare() {
    // is this A?
    cout << is_same< A<*> , CompareT >::value << endl; // A<?> ????
}
ログイン後にコピー

上記のコードを考えると、CompareT が A<> であるかどうかをどのように検証できますか。ある型の場合 *?

解決策:

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 {};

static_assert(is_specialization<std::vector<int>, std::vector>{}, "");
static_assert(!is_specialization<std::vector<int>, std::list>{}, "");
ログイン後にコピー

上記の例では、is_specialization は 2 つの引数、T と Template を受け取ります。 T が Template の特殊化である場合、is_specializationは std::true_type です。それ以外の場合は、std::false_type.

以上がクラスは C のテンプレート特化ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート