【问题标题】:How to write generic templated functions taking Eigen Tensor as parameters?如何编写以特征张量为参数的通用模板函数?
【发布时间】:2016-10-15 23:49:54
【问题描述】:

编写采用特征矩阵/数组的函数的最佳实践在here 中有很好的记录。但我对如何对 Eigen::Tensor 对象和表达式做同样的事情很感兴趣。

更具体地说,我想编写通用模板化函数,该函数将张量对象或表达式作为参数,同时对它们进行一些操作(包括调整大小/修改)。

我尝试使用 TensorBase 作为函数参数,例如:

template<class Derived, int AccessLevel>
void myRankAgnosticFunc(Eigen::TensorBase<Derived, AccessLevel >& tensor) {
  ...
  tensor.derived().resize(...); // Doesn't work since derived() is private
  ....
}

然而不同的是,Eigen::MatrixBase derived() 是受保护的,不能使用。

关于如何使用 Eigen::Tensor 对象编写通用模板函数有什么建议吗?

【问题讨论】:

    标签: c++ templates eigen eigen3


    【解决方案1】:

    我不知道为什么derived()TensorBase 中受到保护。作为一种解决方法,您可以像这样自己投射到Derived&amp;

    Derived& tensr = static_cast<Derived&>(tensor);
    // ...
    tensr.resize(...);
    

    【讨论】:

      【解决方案2】:

      为什么不简单地将张量类型作为模板参数传递?

      template<class MyTensor>
      void myRankAgnosticFunc(MyTensor& tensor) {
        ...
        tensor.resize(...);
        ...
      

      }

      【讨论】:

      • 我同意,在大多数情况下这已经足够了。当然,您会失去一点类型安全性。 (而且我还是不明白,为什么derived() 是受保护的)
      猜你喜欢
      • 2016-02-05
      • 1970-01-01
      • 1970-01-01
      • 2011-06-25
      • 1970-01-01
      • 2020-07-08
      • 1970-01-01
      • 2018-06-06
      • 1970-01-01
      相关资源
      最近更新 更多