類別是模板特化嗎?
在 C 中,確定給定類型是否是特定類型的特化可能很有用類別模板。例如,考慮以下程式碼:
template<class T> struct A {}; template<class CompareT> void compare() { // is this A? cout << is_same< A<*> , CompareT >::value << endl; // A<?> ???? }
給定上述程式碼,我們如何驗證CompareT 是否為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 {}; static_assert(is_specialization<std::vector<int>, std::vector>{}, ""); static_assert(!is_specialization<std::vector<int>, std::list>{}, "");
在上面的範例中,is_specialization 採用兩個參數:T 和 Template。如果T是Template的特化,則is_specialization<T,Template>;是 std::true_type。否則,它是 std::false_type。
以上是類別是 C 中的模板特化嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!