我正在尝试实现一个简单的线性代数库(用于学习目的)。
问题=>我希望Matrix
模板类在编译时声明一个固定大小的数组,或者如果Rows
和Columns
的数量尚未知道则使用动态内存分配。
我如何有效/正确地做到这一点? (我已经有了一个简单/天真的想法):
const long Dynamic = -1;
template<typename T, long Rows, long Cols>
class Matrix {
private:
enum {
kIsDynamicStorage = Rows == Dynamic || Cols == Dynamic
};
//?? conditional<is_dynamic_storage, vector<vector<T>>, T[Rows][Cols]> storage;
// Use for fixed-size
array<array<T, kIsDynamicStorage ? 0: Cols>, kIsDynamicStorage ? 0: Rows> storage;
// Use for dynamic size
vector<vector<T>> dynamic_storage;
public:
enum {
kRowsAtCompileTime = Rows,
kColsAtCompileTime = Cols
};
Matrix();
// Use for dynamic size
Matrix(size_t rows, size_t cols);
};
有没有正确/更好的方法呢?
答案 0 :(得分:0)
如何使用std::conditional
?
static constexpr bool isDS { (Rows == Dynamic) || (Cols == Dynamic) };
typename std::conditional<isDS,
std::vector<std::vector<T>>,
std::array<std::array<T, Cols>, Rows>>::type storage;