专用模板功能与专用模板功能无模板关键字

时间:2015-08-20 17:14:02

标签: c++ templates template-specialization

代码1:

template<typename T>
T sum(T t1, T t2)
{
    return t1 + t2;
}

int sum(int a, int b)
{
    return a + b + a;
}

int main()
{
    sum(10,20);
    return 0;
}

码2:

template<typename T>
T sum(T t1, T t2)
{
    return t1 + t2;
}

template<>
int sum<int>(int a, int b)
{
    return a + b + a;
}

int main()
{
    sum(10,20);
    return 0;
}

两种情况下的专用和函数有什么不同吗? 我的编译器为两种情况提供相同的输出。 我总是遵循第一种方法。与第二种方法不同的是,我们第一次看到它是一种专门的功能吗?

2 个答案:

答案 0 :(得分:2)

第一个是模板专用,第二个是函数重载。它在解决规则中很重要 - 完全匹配的重载将通过专用模板进行选择。

答案 1 :(得分:0)

如果你有函数sum2:

template<typename T>
T sum2(T t1, T t2)
{
    ...
    return sum<T>(t1, t2);
}

它不会调用重载的变体1,但会从变体2中调用模板特化。