我想将无矩阵稀疏求解器与自定义矩阵 vector 乘积对象一起使用。这是一个很好的例子如何做到这一点 - https://eigen.tuxfamily.org/dox/group__MatrixfreeSolverExample.html
但在此示例中,由于 generic_product_impl 签名,自定义矩阵产品对象应该是常量
template<typename Dest>
static void scaleAndAddTo(
Dest& dst,
const MatrixReplacement& lhs,
const Rhs& rhs,
const Scalar& alpha)
在我遇到的许多问题中,每次产品调用都需要大量临时缓冲区。分配它们一次是非常明智的,但我不能将它们存储在 MatrixReplacement
中,因为它作为 const 传递。
在 Eigen 中是否有可能克服这个问题?
最佳答案
有两个即时选项:
使用
mutable
const
中需要更改的成员的关键字方法(即你的临时缓冲区)。这个关键字在类的可观察行为是常量的情况下有意义,尽管您需要修改成员。示例包括缓存值、互斥体或您的缓冲区。C++ 对传播
const
并不完全严格.const unique_ptr<T>
将返回一个(非常量)T&
取消引用时(因为 const 表示“你不能更改指针”,而不是“你不能更改指针对象”;这与内置指针相同)。您可以类似地将“真正的”稀疏矩阵类包装在假装为 const 的东西中,但如果 STL 智能指针不足,则允许对矩阵进行非常量访问。如果你给它起一个合适的名字,那么它并不像听起来那么可怕。
我推荐选项 1。
关于c++ - 稀疏求解器的特征非常数 MatrixReplacement,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53338985/