저는 Tensor의 템플릿 표현을 사용하여 바깥 쪽 제품을 구현하고 있습니다. Tensor<1>
간단한 벡터에 분해 할 수있는 전문성과 함께이 텐서 외부 생성물에서 무한 템플릿 재귀가 발생하는 이유는 무엇입니까?
template <int N>
struct Tensor
{
Tensor<N - 1> x;
Tensor<N - 1> y;
Tensor<N - 1> z;
};
:
텐서의 기본 프로토 타입처럼 보인다. 순서 N
의
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
의 외적을 순서 M
의 텐서 B
단순히 B
텐서와 A
의 각 요소의 외적이다 : 내 Outer
함수로서 정의된다. 텐서가 N
이고, 텐서가 1
인 임의의 텐서의 외부 생성물도 유사하게 정의된다.
기본 케이스는 단지 두 개의 주문 1
텐서 (벡터)의 외적입니다. 를 제외하고, 내가 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 오류를 발생시킵니다. –