【发布时间】:2020-05-24 20:47:10
【问题描述】:
我正在尝试将Vector 定义为行/列Matrix。 Vector 需要一些Matrix 没有的方法,所以我专门化了Matrix:
template<typename T, unsigned N, unsigned M>
struct Matrix {
T data[N][M];
};
template <typename T, unsigned N>
struct Matrix<T, N, 1> : public Matrix<T, N, 1> {
T at(unsigned index) {
return data[index][0];
}
};
template <typename T, unsigned N>
using Vector = Matrix<T, N, 1>;
此代码无法编译,因为特化是递归类型。我在这里想要继承的原因是这样我就可以将Matrix的所有内容都包含到专业化中,而无需复制和粘贴。
有没有办法可以实例化原始的Matrix 并从中继承?如果有,我的类型会变成非递归的吗?
想到的另一种解决此问题的方法是将常规Matrix 的内容简单地#include 放入初始定义和所有特化中。但这远非惯用语。
【问题讨论】:
标签: c++ templates matrix specialization