2
我想創建一個完整的類型的部分專業化。我的想法是做類似的東西:爲什麼enable_if不能用於專門的參數?
#include <type_traits>
template <typename T>
struct Class {
};
template <typename T>
struct Class<typename std::enable_if<std::is_integral<T>::value, T>::type> {
};
然而,這會導致以下錯誤:
error: template parameters not deducible in partial specialization:
struct Class<typename std::enable_if<std::is_integral<T>::value, T>::type> {
^
note: 'T'
它的工作,如果我使用一個額外的模板參數:
#include <type_traits>
template <typename T, typename Enable = void>
struct Class {
};
template <typename T>
struct Class<T, typename std::enable_if<std::is_integral<T>::value>::type> {
};
爲什麼我需要額外的模板參數嗎?
什麼,但不專業化還決心類類型?我不明白第二種情況對編譯器是如何清楚的。 –
你實際上並不需要'Enable = void',所以不用它,它也應該可以正常工作。 'template'應該訣竅 –
啊!現在我明白了!基本案例是。專業化是類,所以模板參數E現在是專門的。沒有E,編譯器會認爲在行動中沒有部分專業化(專業化與基礎案例類型相同)。感謝您爲此閃亮! –