我在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中不起作用。
答案 0 :(得分:1)
函数模板特化的正确语法是
template<> Point add(Point a, Point b) { ... }
但是,add(Line, Point)
不可能是主要模板template<class T> T add(T a, T b)
的特化,因为后者需要两个相同类型的参数。