C++ 如何编写以本征张量为参数的通用模板函数?
使用特征矩阵/数组编写函数的最佳实践已经有很好的文档记录。但我感兴趣的是如何对对象和表达式执行相同的操作 更具体地说,我想编写通用模板函数,在对张量对象或表达式执行某些操作(包括调整大小/修改)时将其作为参数 我尝试使用TensorBase作为函数参数,例如:C++ 如何编写以本征张量为参数的通用模板函数?,c++,templates,eigen,eigen3,C++,Templates,Eigen,Eigen3,使用特征矩阵/数组编写函数的最佳实践已经有很好的文档记录。但我感兴趣的是如何对对象和表达式执行相同的操作 更具体地说,我想编写通用模板函数,在对张量对象或表达式执行某些操作(包括调整大小/修改)时将其作为参数 我尝试使用TensorBase作为函数参数,例如: template<class Derived, int AccessLevel> void myRankAgnosticFunc(Eigen::TensorBase<Derived, AccessLevel >&a
template<class Derived, int AccessLevel>
void myRankAgnosticFunc(Eigen::TensorBase<Derived, AccessLevel >& tensor) {
...
tensor.derived().resize(...); // Doesn't work since derived() is private
....
}
模板
void myRankAgnosticFunc(本征::张量基和张量){
...
tensor.derived().resize(…);//不起作用,因为derived()是私有的
....
}
但是,与之不同的是,Eigen::MatrixBase-Derivated()受保护,无法使用
关于如何使用Eigen::Tensor对象编写通用模板函数,有什么建议吗?我不知道为什么
derived()
在TensorBase
中受到保护。作为一种解决方法,您可以像这样强制转换为派生的&
您自己:
Derived& tensr = static_cast<Derived&>(tensor);
// ...
tensr.resize(...);
Derived&tensr=static_cast(张量);
// ...
调整张量(…);
为什么不将张量类型作为模板参数传递
template<class MyTensor>
void myRankAgnosticFunc(MyTensor& tensor) {
...
tensor.resize(...);
...
模板
void myRankAgnosticFunc(MyTensor和tensor){
...
张量。调整大小(…);
...
}我同意,在大多数情况下,这就足够了。当然,你会失去一点类型安全性。(我仍然不明白,为什么
derived()
受到保护)