首頁 > 後端開發 > C++ > 類別是 C 中的模板特化嗎?

類別是 C 中的模板特化嗎?

DDD
發布: 2024-11-13 04:17:02
原創
787 人瀏覽過

Is a Class a Template Specialization in C  ?

類別是模板特化嗎?

在 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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板