C++模板元程序.条件内存分配

C++ template meta progr. conditional memory allocation

本文关键字:条件 内存 分配 程序 C++      更新时间:2023-10-16

我正在尝试实现一个简单的线性代数库(用于学习目的(。

问题 =>我希望 Matrix 模板类在编译时声明一个固定大小的数组,或者在RowsColumns的数量未知时使用动态内存分配。

我怎样才能有效/正确地做到这一点?(我已经有一个简单的/幼稚的想法(:

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);
};

有没有正确/更好的方法来做到这一点?

使用 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;