テンプレートの特殊化の識別
C では、特定のクラスが特定のクラス テンプレートの特殊化であるかどうかを判断する必要がある場合があります。たとえば、次のクラス テンプレートを考えてみましょう:
template <class T> struct A {};
CompareT 型があるとします。それが A<> であるかどうかを確認するにはどうすればよいですか?あるタイプ について?次の例を考えてみましょう。
template<class CompareT> void compare(){ // is this A ? cout << is_same< A<*> , CompareT >::value; // A<*> ???? } int main(){ compare< A<int> >(); }
この例では、A
解決策:
この問題に対処する 1 つのアプローチは、テンプレート メタプログラミングを利用することです。以下は、照合する必要なテンプレートを指定できるスニペットです:
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>{}, "");
このソリューションは、指定された型が実際に特定のクラス テンプレートの特殊化であるかどうかを確認する便利な方法を提供します。
以上がクラスが C のクラス テンプレートの特殊化であるかどうかを判断するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。