Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用模板构造函数完全专门化模板类_C++_Template Specialization - Fatal编程技术网

C++ 使用模板构造函数完全专门化模板类

C++ 使用模板构造函数完全专门化模板类,c++,template-specialization,C++,Template Specialization,我有一个模板类,定义如下: 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)

我有一个模板类,定义如下:

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];
};
(它将做不同的事情)

我应该如何进行规格化?
其他函数不会从我的specilization矩阵中改变,但是如果我对类进行specilization,我将必须对每个成员进行specilization,不是吗

我的猜测是只指定必须使用的成员函数,然后使用

using Matrix4 = Matrix<4u, 4u>
使用矩阵x4=矩阵
够了吗?
我是否能够在规范中使用矩阵中的运算符,如:

模板
Vec3矩阵::运算符*(常量Vec3和vec)
{
vec4vec4d(vec);
vec4d=矩阵::运算符*(vec);
返回Vec3(vec4d.x,vec4d.y,vec4d.z);
}
另外,我打算在Matrix4中使用继承


谢谢你抽出时间来

好吧,我说的似乎很管用(我有打字错误,我找不到…)

解决方案:

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>
模板
Vec3矩阵::运算符*(常量Vec3和vec)
{
vec4vec4d(vec);
vec4d=矩阵::运算符*(vec);
返回Vec3(vec4d.x,vec4d.y,vec4d.z);
}
使用Matrix4=矩阵
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);
}
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>