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

我正在尝试在科学计划中使用Eigen3库,但我正在努力制作一些简单的函数和成员函数.例如,我不确定应该选择什么类型的返回类型,如下所示:

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

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

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

我的问题是:

>第二个例子是否可能?
>我如何计算像p1 * p2这样的操作类型?
>在精心设计的功能的情况下,如何计算返回类型?

解决方法:

在第一个示例中,返回auto将运行良好,因为它是一个不引用任何本地临时表达式的单个表达式.

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

typename Derived::PlainObject p2;
p2.resizeLike(p1);

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

上一篇:c – 模板分辨率因增强多精度特征而失败


下一篇:逗号初始化和构造函数C和Eigen