私はTensorのテンプレート表現を使用して外側の製品を実装しています。このテンソル外積で無限のテンプレート再帰が発生する原因は何ですか?
テンソルの基本的なプロトタイプは次のようになります。簡単なベクトルに分解するためにTensor<1>
のための専門で
template <int N>
struct Tensor
{
Tensor<N - 1> x;
Tensor<N - 1> y;
Tensor<N - 1> z;
};
。注文N
のテンソルA
および順序M
のテンソルB
の外積は、単にB
テンソルとA
の各要素の外積である
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;
}
:私のOuter
関数は以下のように定義されます。テンソルの次数がN
であり、テンソルが1
の任意のテンソルの外積も同様に定義される。
ベースケースは、単に2つの次数1
テンソル(ベクトル)の外積です。 I上で定義されているように、除きMSVCでC1202
エラー取得しています:私は外積の私の定義で間違って何をしました
エラーC1202 ?
VS11ベータ版でうまく動作します。あなたは何番を使っていますか?あなたはそれを専門にしていますか? –
VC10 SP1で[私のためにうまく動作](http://ideone.com/LcKdP) [SSCCE](http://sscce.org/)を投稿してください。 – ildjarn
@ildjarn:http://pastebin.com/rTU1c5BCこの最小限の例では、VS 2010 Ultimate SP1でC1202エラーが発生します。 –