以特征类型作为参数的函数的返回类型不明确

Ger*_*ano 5 c++ templates eigen eigen3

我正在尝试在科学程序中使用 Eigen3 库,但我正在努力制作一些简单的函数和成员函数。例如,我不确定应该为以下内容选择哪种返回类型:

template <typename DerivedA,typename DerivedB>
inline **something** mult(const MatrixBase<DerivedA>& p1,
                          const MatrixBase<DerivedB>& p2)
  {
  return p1*p2;
  }
Run Code Online (Sandbox Code Playgroud)

我假设有一些课程,比如说productOp,我可以毫无问题地返回。我仍然无法想象在涉及大量操作的函数中会发生什么,或者更糟糕的是,依赖于输入的迭代会发生什么:

template <typename Derived>
**something** foo(const MatrixBase<Derived>& p1))
  {
  **something** p2;
  p2.setZero();
  while(p2(0,0) < 1)
    p2 += p1; 
  return p2;
  }
Run Code Online (Sandbox Code Playgroud)

我的问题是:

  1. 第二个例子可能吗?
  2. 我怎样才能确定像这样的操作的类型p1*p2
  3. 在复杂函数的情况下如何计算返回类型?

gga*_*ael 3

在第一个示例中,返回auto效果很好,因为它是一个不引用任何本地临时变量的表达式。

在第二个中,您需要创建并返回一个具有自己的存储的实际矩阵/向量,例如:

typename Derived::PlainObject p2;
p2.resizeLike(p1);
Run Code Online (Sandbox Code Playgroud)

返回类型将为typename Derived::PlainObject.