gpt4 book ai didi

C++ Eigen : recursive functions accepting any matrix class

转载 作者:太空狗 更新时间:2023-10-29 21:38:08 24 4
gpt4 key购买 nike

我想要一个递归函数

template <typename Derived>
void f(Eigen::MatrixBase<Derived>& m)
{
size_t blockRows = ...
size_t blockCols = ...
....
f(m.block(0, 0, blockRows, blockCols));
}

不幸的是,这会导致无限的编译时间递归。

第一个电话是

f<Eigen::MatrixBase<Derived> >

第二个是

f<Eigen::Block<Eigen::MatrixBase<Derived>, ... > >

第三个电话是

f<Eigen::Block<Eigen::Block<Eigen::MatrixBase<Derived>, ... >, ... > >

每次请求一个 block 。

在 Eigen 中实现递归函数的最佳实践是什么,它仍然适用于任何 Eigen 矩阵类型?

我想,我应该使用某种类型,它仍然包装着同一 block 内存,但不是表达式模板,它会被求值。

最佳答案

您可以将递归 block 转换为 Eigen::Ref 以避免无限类型实例化:

Ref<MatrixXd> bl = m.block(0, 0, blockRows, blockCols);
f(bl);

为了保持完全通用,您可以将 MatrixXd 替换为 typename Derived::PlainObject

关于C++ Eigen : recursive functions accepting any matrix class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36090656/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com