Tensor のテンプレート表現を使用して外積を実装しています。
テンソルの基本プロトタイプは次のようになります。
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
基本ケースは、単純に 2 次テンソル (ベクトル)の外積です。ただし、上記で定義したようにC1202
、MSVC でエラーが発生します。
エラー C1202: 再帰型または関数の依存関係のコンテキストが複雑すぎます
外積の定義で何が間違っていましたか?