我有许多以结构形式实现的向量(数学类型)。有一个基础.bash_profile
,它是一个模板,然后这个模板的多个实现用于不同维度的向量:
Vector
我刚刚包含了一个操作符,但显然有其他方法和各种方法来获取点积等。然后我就有这样的实现:
template<unsigned int D>
struct Vector
{
float values[D];
inline Vector<D> operator*(const Vector<D>& v) const
{
Vector<D> result;
for (unsigned int i = 0; i < D; i++)
result[i] = values[i] * v[i];
return result;
}
float operator[](unsigned int i) const
{
return values[i];
}
};
然后我有两个struct Vector2 : Vector<2>
{
Vector2(float x = 0, float y = 0) : Vector<2>()
{ }
};
我尝试使用乘法运算符,如:Vector2
它会抛出错误:Vector2 textureOffsetPixels = textureOffset * textureSampleSize;
。 conversion from Vector<2u> to non-scalar type 'Vector2' requested
怎么了?为什么这不起作用?这两个变量都是显式类型Vector<2u>
。
答案 0 :(得分:3)
为了能够将textureOffset * textureSampleSize
的结果Vector<2>
转换为Vector2
,您需要转换功能。像这样的构造函数就足够了:
Vector2(const Vector<2> &base) : Vector<2>(base) {}
该错误提及Vector<2u>
,因为模板参数为unsigned int
,因此2
会隐式转换为2u
。
答案 1 :(得分:0)
您的operator *
返回Vector<2>
,而不是Vector2
。以下内容适用:
Vector<2> a, b, c;
c = a * b;