类型别名和动态分配的数组

问题描述

| 我正在尝试通过blitz ++数组库中的编译器来促进自动矢量化。由于这个原因,我想以固定长度矢量的块的形式呈现数组数据的视图,这些矢量已经很好地矢量化了。但是,我无法弄清楚类型别名规则与动态分配的数组结合使用的含义。 这是主意。数组当前包含
T_numtype* restrict data_;
通过遍历这些数据来完成操作。我想做的是显示此数组的替代视图,即
TinyVector<T_numtype,N>
的数组,它是一个定长向量,其操作使用表达式模板机制完全矢量化。这个想法是L长度的数组应该是2或3。有没有一种方法可以做到而又不会触犯类似的规则? 对于静态分配的数组,
union {
  T_numtype data_[L];
  TinyVector<T_numtype,N>[L/N];
};
我能想到的最接近的是定义
typedef union {
  T_numtype data_[N];
  TinyVector<T_numtype,N>;
} u;
u* data_;
然后分配给
data_ = new u[L/N];
但是似乎现在我已经放弃了将整个数组作为T_numtype的平面数组进行寻址的权利,因此要访问特定元素,我需要执行
data_[i/N].data_[i%N]
,这要复杂得多。 那么,有没有办法合法地创建
T_numtype data_[L]
TinyVector<T_numtype,N>[L/N]
的并集,其中L是动态确定的大小? (我知道还有其他对齐问题,即N必须是与TinyVector成员的对齐相同的值,否则数组中将有孔。)     

解决方法

别名很难合法化。但是,如果某些“操作是通过遍历这些数据来完成的。”,这些操作是否要求这些数据恰好是T_numtype的数组? 最好将数据包装为一个类型为“ 3”或什至“ 11”的数据类,因为显然L是在运行时确定的,并为那些希望将整个数据循环为单个操作的操作公开一对迭代器顺序。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...