首頁  >  文章  >  後端開發  >  如何確定 C 中的模板專業化?

如何確定 C 中的模板專業化?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-13 06:25:02713瀏覽

How to Determine Template Specialization in C  ?

確定模板特化

在 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;應符合A;並列印1.

解:

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn