我正在尝试根据模板参数将某些几何函数特化为2D或3D。最好如果我包含一些(非常不完整的)用于玩具版本问题的代码:
template <typename T, int d>
class Point
{
public:
int x;
int y;
int z;
T add ()
{
return T(0);
}
template <>
T add <T, 2> ()
{
return x + y;
}
template <>
T add <T, 3> ()
{
return x + y + z;
}
};
这段代码无法编译。我尝试了很多不同的模板参数格式和类定义,但无法找到一种方法来对“d”进行函数专门化,同时保持“T”的通用性。
在我的实际解决方案中,我正在尝试计算梯度、曲率、插值等针对2D或3D情况的特定内容。有些东西,比如梯度计算,可以简单地使用“d”参数来限制for循环迭代。而其他一些,比如插值,需要为2D和3D分别提供一个函数。
任何提示都非常感谢!
T
用于什么?它是否应该是您的坐标类型?如果是这样,为什么 x、y、z 被声明为int
而不是类型T
? - Vaughn Cato