【问题标题】:Avoiding circular class dependencies when definitions are required需要定义时避免循环类依赖
【发布时间】:2012-08-28 13:47:54
【问题描述】:
template <class T=A>
struct B {
   T a;
};

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

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

【问题讨论】:

  • 在 DevStudio 2005 中对我来说编译得很好。不要忘记模板在使用时被实例化,而不是在声明时被实例化。
  • 是的,上面的解决方法确实有效。删除模板不会。

标签: c++ templates


【解决方案1】:

您可以利用前向声明就足够的事实,以防您按值返回(如A::foo 的情况):

struct B;

struct A {
  B foo();
};

struct B {
  A a;
};

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

【讨论】:

  • 在进行测试时,我保持 foo 实现内联。没想到这真的很重要。
猜你喜欢
  • 1970-01-01
  • 2013-02-06
  • 1970-01-01
  • 2012-02-15
  • 2012-08-10
  • 1970-01-01
  • 2018-09-03
  • 1970-01-01
  • 2020-08-12
相关资源
最近更新 更多