2012-04-25 2 views
1
template <class T=A> 
struct B { 
    T a; 
}; 

struct A { 
    B<A> foo(){ 
     B<A> result; 
     return result; 
    } 
}; 

템플릿을 사용하지 않아도되는데 어떻게해야합니까? (사용법을 보려면 기본 매개 변수를 기억하십시오). 문제는 두 클래스 모두 서로의 정의가 필요하다는 것입니다. 그러나 템플릿 솔루션이 보여주는 것처럼 "진짜"순환 종속성은 없습니다.정의가 필요할 때 원형 클래스 종속성 피하기

당신은 앞으로 선언이 경우 ( A::foo의 경우와 같이)는 값으로 반환하고 충분한 사실 이용할 수
+1

잊지 마세요 DevStudio와 2005 년 나를 위해 잘 컴파일을 템플릿이 선언 될 때 사용되지 않을 때 인스턴스화됩니다. – Skizz

+0

그래, 위의 해결 방법은 효과가있다. 템플릿을 제거하는 것은 아닙니다. – arithma

답변

3

:

struct B; 

struct A { 
    B foo(); 
}; 

struct B { 
    A a; 
}; 

B A::foo() { 
    B result; 
    return result; 
} 
+0

테스트를하면서 foo 구현을 인라인으로 유지했습니다. 실제로 중요 할 것이라고 생각하지 않았습니다. – arithma

관련 문제