C++ Eigen:接受任何矩阵的递归函数class
C++ Eigen: recursive functions accepting any matrix class
我想要一个递归函数
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>, ... >, ... > >
每请求一个块。
在 Eigen 中实现递归函数的最佳实践是什么,它仍然适用于任何 Eigen 矩阵类型?
我想,我应该使用某种类型,它仍然包装着同一块内存,但不是表达式模板,它会被求值。
您可以将递归块转换为 Eigen::Ref
以避免无限类型实例化:
Ref<MatrixXd> bl = m.block(0, 0, blockRows, blockCols);
f(bl);
为了保持完全通用,您可以将 MatrixXd
替换为 typename Derived::PlainObject
。
我想要一个递归函数
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>, ... >, ... > >
每请求一个块。
在 Eigen 中实现递归函数的最佳实践是什么,它仍然适用于任何 Eigen 矩阵类型?
我想,我应该使用某种类型,它仍然包装着同一块内存,但不是表达式模板,它会被求值。
您可以将递归块转换为 Eigen::Ref
以避免无限类型实例化:
Ref<MatrixXd> bl = m.block(0, 0, blockRows, blockCols);
f(bl);
为了保持完全通用,您可以将 MatrixXd
替换为 typename Derived::PlainObject
。