在 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
解:
要實現此目的,我們可以利用名為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中文網其他相關文章!