クラス テンプレートの特殊化を確認できますか?
ソフトウェア開発では、クラス テンプレートによって特定のクラスが特殊化されているかどうかを判断する必要があることがよくあります。 。次のシナリオを考えてみましょう:
問題:
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> >(); }</p> <p>この使用例では、A<int> </p> <p><strong>解決策:</strong></p> <p>以下のコードを使用すると、クラスが の特殊なバージョンであるかどうかを確認できます。テンプレート:</p> <pre class="brush:php;toolbar:false">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 を呼び出すと、クラスがテンプレート特化かどうかを識別でき、コードの構造と動作をより細かく制御できるようになります。
以上がクラスがクラス テンプレートの特殊化であるかどうかを判断できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。