クラスはテンプレートの特殊化ですか?
C では、指定された型が特定の型の特殊化であるかどうかを判断すると便利です。クラステンプレート。たとえば、次のコードを考えてみましょう。
1 2 3 4 5 6 7 8 | template< class T>
struct A {};
template< class CompareT>
void compare() {
cout << is_same< A<*> , CompareT >::value << endl;
}
|
ログイン後にコピー
上記のコードを考えると、CompareT が A<> であるかどうかをどのように検証できますか。ある型の場合 *?
解決策:
is_specialization テンプレート メタ関数を利用すると、型がクラス テンプレートの特殊化であるかどうかを確認できます。以下に例を示します。
1 2 3 4 5 6 7 8 | 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 サイトの他の関連記事を参照してください。