为什么这个部分模板专业化失败了?
Why is this partial template specialization failing?
这是我的代码。
#include <iostream>
template<class> struct IsInteger;
template<class> struct IsInteger { using value = std::false_type; };
template<> struct IsInteger<int> { using value = std::true_type; };
int main()
{
std::cout << std::boolalpha <<
IsInteger<5>::value::value << '\n';
}
以上代码导致错误提示
Source.cpp(9,36): error C2974: 'IsInteger': invalid template argument for '<unnamed-symbol>', type expected
Source.cpp(9,50): error C2955: 'IsInteger': use of class template requires template argument list
我不明白为什么编译器不选择
template<> struct IsInteger<int> { using value = std::true_type; };
在这种情况下。为什么会导致错误?
您需要将您的特征用作 IsInteger<int>
而不是 IsInteger<5>
。
此外,在这种情况下使用 std::true_type
和 std::false_type
的惯用方法是继承它们,而不是将它们别名为值:
template<class> struct IsInteger : std::false_type {};
template<> struct IsInteger<int> : std::true_type {};
int main()
{
std::cout << std::boolalpha << IsInteger<int>::value << '\n';
}
这是我的代码。
#include <iostream>
template<class> struct IsInteger;
template<class> struct IsInteger { using value = std::false_type; };
template<> struct IsInteger<int> { using value = std::true_type; };
int main()
{
std::cout << std::boolalpha <<
IsInteger<5>::value::value << '\n';
}
以上代码导致错误提示
Source.cpp(9,36): error C2974: 'IsInteger': invalid template argument for '<unnamed-symbol>', type expected
Source.cpp(9,50): error C2955: 'IsInteger': use of class template requires template argument list
我不明白为什么编译器不选择
template<> struct IsInteger<int> { using value = std::true_type; };
在这种情况下。为什么会导致错误?
您需要将您的特征用作 IsInteger<int>
而不是 IsInteger<5>
。
此外,在这种情况下使用 std::true_type
和 std::false_type
的惯用方法是继承它们,而不是将它们别名为值:
template<class> struct IsInteger : std::false_type {};
template<> struct IsInteger<int> : std::true_type {};
int main()
{
std::cout << std::boolalpha << IsInteger<int>::value << '\n';
}