在使用MSVC编译期间出现以下错误。主要思想是根据类型的大小来专门化功能栏。如何解决这个问题?我更喜欢模板不切换的解决方案(sizeof(T))
struct S
{
template<typename T>
void foo(T t)
{
bar<sizeof(T), T>();
}
template<int Size, typename T>
void bar(T t)
{
}
template<typename T> // : error C2768: 'S::bar' : illegal use of explicit template arguments
void bar<1, T>()
{
}
};
完全专业化的模板
struct S
{
template<typename T>
void foo(T t)
{
bar<sizeof(T)>();
}
template<int Size>
void bar()
{
}
template<> // Works !!!
void bar<1>()
{
}
};