我有一个模板类定义如下:
template<unsigned int N, unsigned int L>
class Matrix
{
public:
Matrix(const float k = 0.0f)
{
for(unsigned int i = 0; i < N; ++i)
for(unsigned int j = 0; j < L; ++j)
{
if(i == j) m[i][j] = k;
else m[i][j] = 0.0f;
}
}
//With other constuctors, methods and operators
protected:
float m[N][L];
};
我想对Matrix&lt; 4u,4u&gt;进行专业化。
除了我将覆盖的函数之外,所有函数都将与模板中的函数做同样的事情:
Vec3 operator*(const Vec3& vec)
{
Vec3 v;
if(L != 3)
{
if(Core::Debug::Log::CoreLogIsActive)
Core::Debug::Log::ConsoleLog("Number of column of the matrix is different from the number of column of the vector",
Core::Debug::LogLevel::Error);
return v;
}
v.x = m[0][0] * vec[0] + m[0][1] * vec[1] + m[0][2] * vec[2];
v.y = m[1][0] * vec[0] + m[1][1] * vec[1] + m[1][2] * vec[2];
v.z = m[2][0] * vec[0] + m[2][1] * vec[1] + m[2][2] * vec[2];
return v;
}
(它会做不同的事情)
我应该如何进行说明? 其他功能并没有从我的特定矩阵&lt; 4u,4u&gt;中改变。但是,如果我进行课程规范,我将不得不指定每个成员赢得了我?
我的猜测是仅指定必须的成员函数,然后只使用
using Matrix4 = Matrix<4u, 4u>
这样就够了吗? 并且我是否能够使用Matrix&lt; 4u,4u&gt;中的运算符进行规范化。喜欢:
template <>
Vec3 Matrix<4u, 4u>::operator*(const Vec3& vec)
{
Vec4 vec4d(vec);
vec4d = Matrix<4u, 4u>::operator*(vec);
return Vec3(vec4d.x, vec4d.y, vec4d.z);
}
另外,我打算在Matrix4
中使用继承感谢您的时间
答案 0 :(得分:0)
好吧,我所说的似乎有用(我输错了我无法找到......)
解决方案:
template <>
Vec3 Matrix<4u, 4u>::operator*(const Vec3& vec)
{
Vec4 vec4d(vec);
vec4d = Matrix<4u, 4u>::operator*(vec);
return Vec3(vec4d.x, vec4d.y, vec4d.z);
}
using Matrix4 = Matrix<4u, 4u>