创建具有假大小的统一特征表达式(以节省内存)

Creating a uniform Eigen expression with a fake size (to save memory)

我正在处理一些 CFD 代码和一些常量(例如表面粗糙度),我想提供将其设置为整个场的统一值或非统一值的选项. 我希望这两个选项都表示为 Eigen::DenseBase 导数,这样我就可以简单地为这两个选项使用函数模板。

非统一 值当前表示为 ArrayXXds,其中每一列代表一个单元格。但是,将这种类型用于 uniform 字段将是对 space 的巨大浪费:这些值永远不会改变,因此它们不需要单独表示。

所以我想要的是只存储一个列向量,然后它的行为就像它具有与非统一版本相同的列数(例如允许通过 operator() 或 [=13 访问=]). 我可能可以用包装器 class 来做到这一点,但我可能会 reinventing the square wheel.

我考虑过创建一个 custom nullary expression,但我认为那不是正确的路径,因为 AFAICT 仍然使用相同数量的内存。

如果 Eigen 类型无法实现我正在寻找的内容,我也会接受它作为答案并只使用包装器。

不确定这是否应该是一个答案,因为它等于“RTFM”。

chtz 的指导下,我重新审视了 Eigen 已经提供的功能,我之前曾根据编写不当的基准而忽略了这些功能。但它已经在图书馆里了:

Replicate 完全符合我的要求。