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
解決策:
これを実現するには、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 サイトの他の関連記事を参照してください。