請向我解釋模板專業化選擇的規則。我舉一個例子:如何選擇部分模板專業化?
template<typename T1, typename T2 = int>
struct S : false_type{};
template<typename T>
struct S<T, float> : true_type{};
cout << boolalpha << S<float>::value;
爲什麼輸出是false
?一般來說,在專門的類中默認模板參數typename T2 = int
會發生什麼情況?它是否引入了一些影響力?
我不明白爲什麼你會期望這裏有什麼不同。 'S'中的'float'是* first *類型參數'T1',而不是第二個'T2'。但專業化是爲了如果'T2'是'浮動'。 –
5gon12eder
@ 5gon12eder推測,OP試圖指定部分特化('T')的模板參數;不是一個不常見的初學者錯誤。 –
我最初的想法是,我指定一個模板參數,編譯器應該選擇專業化,因爲它喜歡專業化基地。 – nikitablack