C++模板元程序.条件内存分配
C++ template meta progr. conditional memory allocation
我正在尝试实现一个简单的线性代数库(用于学习目的(。
问题 =>我希望 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);
};
有没有正确/更好的方法来做到这一点?
使用 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;
相关文章:
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- 将字符串存储在c++中的稳定内存中
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- 在没有太多条件句的情况下,我如何避免被零除
- Win32编译器选项和内存分配
- 当vector是tje全局变量时,c++中vector的内存管理
- 带内存和隔离功能的SQLite
- 是否可以通过C++扩展强制多个python进程共享同一内存
- Clang++ 6.0 内存清理器未报告返回值指示条件分支的函数中的未初始化局部变量
- 使用互斥锁和条件变量增强跨内存的进程间共享向量
- 是否可以使用松弛的内存顺序来观察条件?
- 为什么 C++/Java 内存模型不包含条件变量
- C++模板元程序.条件内存分配
- boost::OSX 上 32 位和 64 位程序之间共享内存中的进程间同步机制(互斥体、条件)
- 当使用内存分配函数用作条件语句时会发生什么
- 确定是否将对象分配在静态内存块中(还是如何避免数据竞赛条件)
- 在递归循环中条件修改的引用内存
- CUDA C++共享内存和 if 条件
- valgrind条件跳转或移动取决于未初始化的值,这是否表示内存泄漏
- c++尝试添加Peterson算法以避免共享内存中的竞争条件