等参数的 C++ 函数特化

标签 c++ templates matrix overloading template-specialization

我和其他许多人一样,正在编写一个线性代数库供我个人使用。在此过程中,我试图了解有关使用 C++ 模板进行编程的更多信息。我有一个类,内容类似于

template<typename T, size_t N, size_t M = N>
class Matrix
{
    ...
}

现在,我想将某些运算限制为方阵(例如行列式)。但是当我尝试添加时:

T Determinant<T,N,N>();

编译失败,错误为“Missing ';'”在“<”之前。我尝试在行列式调用上方添加另一个模板,但没有成功。任何有关如何实现这一目标的建议将不胜感激。

最佳答案

不幸的是,您不能像这样专门为特定模板参数指定一个函数,您必须执行整个类。由于您不想重新编码整个事情,因此您可能想使用继承。

//shared code
template<typename T, size_t N, size_t M>
class BaseMatrix
{
    //existing code
};

// non-square general case
template<typename T, size_t N, size_t M=N>
class Matrix : public BaseMatrix<T,N,M>
{
    //forwarding headers
    Matrix (const Matrix<T,N,M>& b) : BaseMatrix<T,N,M>(b) {}
};

//square matrix specialization
template<typename T, size_t N>
class Matrix : public BaseMatrix<T,N,N>
{
    //forwarding headers
    Matrix (const Matrix<T,N,M>& b) : BaseMatrix<T,N,M>(b) {}
    T Determinant();
};

关于等参数的 C++ 函数特化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8040770/

相关文章:

c++ - 有什么方法可以根据类模板类型初始化此变量?

c++ - 类似模板参数的函数

没有任意参数的c++函数模板

python - 从Python中的矩阵创建邻接列表图

c++ - 是否可以保证静态初始化不会覆盖显式初始化的值?

c++ - 为什么在 C++ 中键入 void main() 是不好的

c++ - C++中矩阵透视投影的函数

c - 如何在 C++ 中将 2D 数组映射到 1D 数组中? (列主)

c++ - 从对象数组中删除一个元素

c++ - 指向可变函数模板的指针