template<class T> struct is_ref_wrapper<std::reference_wrapper<T>> : std::true_type {};
它出現在std::experimental::make_array
的possible implementation。我覺得奇怪的原因是類名包含一個模板參數列表<std::reference_wrapper<T>>
,我目前在類聲明中不記得這些,但我不是全職開發人員。這是什麼樣的類模板定義?
template<class T> struct is_ref_wrapper<std::reference_wrapper<T>> : std::true_type {};
它出現在std::experimental::make_array
的possible implementation。我覺得奇怪的原因是類名包含一個模板參數列表<std::reference_wrapper<T>>
,我目前在類聲明中不記得這些,但我不是全職開發人員。這是什麼樣的類模板定義?
從頁面的其他相關行,你掛的是:
template<class> struct is_ref_wrapper : std::false_type {};
這定義了通用模板。下一行是專業化。
template<class T> struct is_ref_wrapper<std::reference_wrapper<T>> : std::true_type {};
當is_ref_wrapper
與std::reference_wrapper<T>
作爲模板參數實例化,則使用專門化。
即線變爲串聯與它上面的一個:
template<class> struct is_ref_wrapper : std::false_type {};
template<class T> struct is_ref_wrapper<std::reference_wrapper<T>> : std::true_type {};
第一行聲明的(主)模板is_ref_wrapper
。第二行聲明瞭一個專業化,當且僅當參數匹配std::reference_wrapper<T>
的某些T
時,纔會選擇專業化,而不是主要模板。這正是所需的行爲。
這就是所謂的專業化 – NathanOliver