我正在查看Eigen矩阵类库和docs状态,可以使用以下模板参数实例化Matrix模板类:
Matrix<typename Scalar, int RowsAtCompileTime, int ColsAtCompileTime>
其中Scalar
是Matrix系数的类型(double,float,int,complex等等)。 RowsAtCompileTime
和ColsAtCompileTime
分别是Matrix维度。
例如,可以如下实例化4x4浮点矩阵:
Matrix<float, 4, 4> matrix;
Eigen docs声明在前一种情况下,因为行在编译时是已知的,而对于“小型”矩阵,Matrix元素的内存是静态分配的。
但是,如果您选择动态分配内存(对于大型矩阵或因为您在编译时不知道行数和列数),则可以使用以下模板实例化,它将动态分配内存:
Matrix<float, Dynamic, Dynamic> matrix;
我的问题是如何使用C ++模板机制在概念上实现这一目标?由于我最感兴趣的是用于实现此目的的C ++技术,有人可以使用Stack类型给我一个简短的例子,其中内存分配以类似的方式控制吗?谢谢!
答案 0 :(得分:3)
模板将部分专用来处理不同的分配。简而言之,
let formatter = NSDateFormatter()
formatter.dateFormat = "yyyy-MM-dd HH:mm:ss Z"
formatter.dateFromString(timestamp)
显然,此示例中缺少许多接口,但这突出了模板特化的 mechanics 的重要部分,以及不同底层存储的详细信息。构造函数(在特化中)将执行动态分配。
实际上,人们可能会将存储的详细信息推迟到部分专业化的template <typename T, int N>
struct Vector {
T data[N];
};
static const int Dynamic = -1;
template <typename T>
struct Vector<T, Dynamic> {
T* data;
};
。 VectorStorage<T, Rows, Cols>
将包含该类型的成员(使用自己的参数正确实例化),并且大部分接口只能实现一次......
Vector