我可以確認類別模板特化嗎?
在軟體開發中,我們經常需要確定給定的類別是否由於類別模板而特化。考慮以下場景:
問題:
給定一個像
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
解決方案:
下面的程式碼可讓您驗證一個類別是否為範本:
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中文網其他相關文章!