c ++显式特化无法正常工作VS Studio

时间:2018-05-09 17:03:51

标签: templates visual-c++

我在Visual Studio 2017中工作并注意到编译错误

template<class T>T add(T a, T b)
{
    return a + b;
};

template<> Line add<Line, Point>(Line line, Point point) /*E0493 there are 
no instances of the "add" function pattern corresponding to the specified  
type*/ 
{
    Line newline;
    newline.start = add(point, line.start);
    newline.end = add(point, line.end);
    return newline;
}
template<> Point add<Point, Point>(Point a, Point b)//here is the same
{
    Point res;
    res.x = a.x + b.x;
    res.y = a.y + b.y;
    return res;
}

我试图删除“模板&lt;&gt;”在add()函数和代码的第2和第3个实现之前工作正常。但我想理解为什么这段代码在我的VS Studio 2017中不起作用。

1 个答案:

答案 0 :(得分:1)

函数模板特化的正确语法是

template<> Point add(Point a, Point b) { ... }

但是,add(Line, Point)不可能是主要模板template<class T> T add(T a, T b)的特化,因为后者需要两个相同类型的参数。