template <typename T> void function(T arg1,
T min = std::numeric_limits<T>::min(),
T max = std::numeric_limits<T>::max())
{
}
template <> void function<int>(int arg1, int min,int max)
{
}
int main(int argc,char* argv[])
{
function<int>(1);
}
它在令牌上的函数默认参数行上给出语法错误 C2689 和 C2059 ::
。但没有专业化,它做得很好。如果我更改默认参数并仍在进行专业化:
template <typename T> void function(T arg1,
T min = T(0),
T max = T(1))
{
}
template <> void function<int>(int arg1, int min,int max)
{
}
问题也消失了。
现在如果我这样使用它:function<int>(1,2,3);
或者function<float>(1.0f)
它很好,所以看起来如果模板函数是专门的,我们必须在调用它时重写默认参数?
但是在我的第二种情况下,我在调用时替换std::numeric_limits<T>::..
为T(..)
没有语法错误function<int>(1)
,这是为什么呢?
(我正在使用 Visual Studio 2010 x64)
由于最初的问题是由于错误,现在问题变成了如何解决它?