c++ - 使用非类型参数时的模板递归
问题描述
我想写一个矩阵类。但是当我想处理行列式函数时,我遇到了麻烦。错误是行列式(下一个)。
template<typename T, int row, int column>
T determinant(const Mat<T, row, column>& current)
{
if (row == 1) return current[0][0];
if (row == 2) return current[0][0] * current[1][1] - current[0][1] * current[1][0];
T sum = 0;
for (int i = 0; i <= row - 1; i++)
{
T sign = 1;
if (i % 2 == 1) sign = -sign;
Mat<T, row -1, column - 1> next;
for (int j = 0, nextRow = 0; j <= row - 1; j++)
{
if (i == j) continue;
for (int k = 0; k <= row - 2; k++)
{
next[nextRow][k] = current[j][k + 1];
}
nextRow++;
}
sum += sign * current[i][0] * determinant(next);
}
return sum;
}
解决方案
我认为您的问题可能与模板递归有关。没有什么能阻止编译器创建无效的 Matrix 类。我认为编译器不会在编译时评估 if 语句。
Mat<T, 0, 0> next;
您可以尝试矩阵类的专业化。这将在编译时停止模板递归。
template<class T, unsigned int rows, unsigned int column>
Mat
{
public:
Det()
{
//Do recursion and decrement rows
}
protected:
T Data[row][column];
}
template<class T, unsigned int column>
Mat<T,2,column>
{
public:
Det()
{
return Data[0][0] * Data[1][1] - Data[0][1] * Data[1][0];
}
protected:
T Data[2][column];
}
推荐阅读
- go - 更改嵌套结构中的相同字段
- python-3.x - Debian 10 Selenium oserror 11 连接
- sms - 当服务仅提供文本字段时,是否有允许发送彩信的 SMS 语法?
- python - UTF-8 解码不解码 python 中的特殊字符
- c++ - D3D11 Best way to decode multiple video in real-time
- python - CDK WAF Python Multiple Statement velues error
- phpword - Is it possible to make PHPWord use square brackets for search patterns?
- java - Looping through multi-dimensional arrays in Java
- c# - How do I set common values (abstract) for a C# solution in Visual Studio with multiple sub projects?
- ajax - Ajax call response as question mark instead of Arabic characters