我正在使用张量的模板表示来实现外部产品。
张量的基本原型如下所示:
template <int N>
struct Tensor
{
Tensor<N - 1> x;
Tensor<N - 1> y;
Tensor<N - 1> z;
};
专门用于Tensor<1>
降级为简单向量。我的Outer
功能定义为:
template <int N, int M>
Tensor<N + M> Outer(const Tensor<N> &lhs, const Tensor<M> &rhs)
{
Tensor<N + M> result;
result.x = Outer(lhs.x, rhs);
result.y = Outer(lhs.y, rhs);
result.z = Outer(lhs.z, rhs);
return result;
}
template <int N>
Tensor<N + 1> Outer(const Tensor<N> &lhs, const Tensor<1> &rhs)
{
Tensor<N + 1> result;
result.x = Outer(lhs.x, rhs);
result.y = Outer(lhs.y, rhs);
result.z = Outer(lhs.z, rhs);
return result;
}
template <>
Tensor<2> Outer(const Tensor<1> &lhs, const Tensor<1> &rhs)
{
Tensor<2> result;
result.x.x = lhs.x * rhs.x;
result.x.y = lhs.x * rhs.y;
result.x.z = lhs.x * rhs.z;
// and so on
return result;
}
阶张量A
和阶N
张量B
的M
外积只是每个元素A
与B
张量的外积。N
任何阶张量与阶张量的外积的1
定义类似。
基本情况只是两个阶1
张量(向量)的外积。除了,如上所述,我C1202
在 MSVC 中遇到错误:
错误 C1202:递归类型或函数依赖上下文太复杂
我对外部产品的定义做错了什么?