需要定义时,避免循环类依赖性

时间:2012-04-25 09:35:45

标签: c++ templates

template <class T=A>
struct B {
   T a;
};

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

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

1 个答案:

答案 0 :(得分:3)

你可以利用这样一个事实,即如果你按价值返回,前向声明就足够了(就像A::foo一样):

struct B;

struct A {
  B foo();
};

struct B {
  A a;
};

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