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

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

如何避免必须使用模板(介意默认参数以查看其用法)。 问题是两个类都需要对方的定义。但是模板解决方案所显示的没有“真正的”循环依赖。需要定义时避免循环类相关性

+1

编译罚款,我在2005年DevStudio的不要忘记该模板在使用时不是在声明时被实例化。 – Skizz 2012-04-25 09:39:53

+0

是的,上面的工作确实奏效。 删除模板是不行的。 – arithma 2012-04-25 09:56:03

回答

3

你可以利用一个事实,即向前声明的情况下,你的价值回归(如与A::foo的情况下)足够:

struct B; 

struct A { 
    B foo(); 
}; 

struct B { 
    A a; 
}; 

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

在测试事情的时候,我保持内联的foo实现。没想到这实际上很重要。 – arithma 2012-04-25 09:56:34