假设我有以下Matrix模板类,并且需要将矢量表示为1 x RowSize或ColSize x 1矩阵(以便我可以重复使用与矢量兼容的许多矩阵运算符:乘以2基质,通过一个标量等)乘以矩阵:部分专业化和SFINAE
template <class T, size_t ColumnSize, size_t RowSize>
struct Matrix {
T [ColumnSize][RowSize];
}
我有两个问题:
1)如果我没有错的我可以通过偏特或矩阵的方法,使用SFINAE(例如实现这一当ColSize或RowSize为1时启用'length'方法)。提及的选项有哪些优缺点?
2)如果我选择去与局部特殊化,有没有办法来定义行和列向量一个专业化,而不是这样的:
template <class T, size_t ColumnSize>
struct Matrix<T, ColumnSize, 1> {
T length() const;
T [ColumnSize][RowSize];
}
template <class T, size_t RowSize>
struct Matrix<T, 1, RowSize> {
T length() const;
T [ColumnSize][RowSize];
}
你应该给更多的上下文,否则你的问题是“基于意见”。 –
如果你问及两者的缺点和优点,我认为这样会更好,因为这样更容易客观回答。 –
建议:您可以使用'enum class VectorOrientation {ColumnVector,RowVector};'将参数定义为'template class Matrix'。那么我认为不会有歧义。 –