我正在研究某些CFD代码和某些常数(例如表面粗糙度),我希望提供将其设置为整个字段的统一值或非统一值的选项。
我希望将两个选项都表示为Eigen::DenseBase
派生词,以便我可以简单地对两个选项使用函数模板。
不一致的值当前表示为ArrayXXd
,其中每一列代表一个单元格。但是,将这种类型用于统一的字段将浪费大量空间:这些值从未更改,因此它们不需要单独的表示形式。
所以我想要的是只存储一个列 vector ,然后将其表现为与非统一版本具有相同的列数(例如,允许通过operator()
或.col(Index)
访问)。
我可能可以通过包装器类来做到这一点,但是我很可能是reinventing the square wheel。
我研究了创建custom nullary expression的方法,但我认为这不是正确的方法,因为AFAICT仍使用相同数量的内存。
如果使用Eigen类型无法找到所需的内容,我也将接受它作为答案,而只会使用包装器。
最佳答案
不知道这是否应该是答案,因为它等于“RTFM”。
在chtz的指导下,我重新审视了Eigen已经提供的功能,该功能以前是我根据糟糕的基准测试而取消的。但这已经在库中了:
Replicate正是我想要的。
关于c++ - 用假的大小创建统一的 Eigen 表达式(以节省内存),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/62880880/