如何编写以特征张量为参数的通用模板函数?
Posted
技术标签:
【中文标题】如何编写以特征张量为参数的通用模板函数?【英文标题】: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 对象编写通用模板函数有什么建议吗?
【问题讨论】:
【参考方案1】:我不知道为什么derived()
在TensorBase
中受到保护。作为一种解决方法,您可以像这样自己投射到Derived&
:
Derived& tensr = static_cast<Derived&>(tensor);
// ...
tensr.resize(...);
【讨论】:
【参考方案2】:为什么不简单地将张量类型作为模板参数传递?
template<class MyTensor>
void myRankAgnosticFunc(MyTensor& tensor)
...
tensor.resize(...);
...
【讨论】:
我同意,在大多数情况下这已经足够了。当然,您会失去一点类型安全性。 (而且我还是不明白,为什么derived()
是受保护的)以上是关于如何编写以特征张量为参数的通用模板函数?的主要内容,如果未能解决你的问题,请参考以下文章