容器的元素如何访问其容器"所有者"?

时间:2016-12-03 08:52:14

标签: c++ architecture circular-dependency forward-declaration

我有这种架构:(简化)

class A {
    container<B*> c
}

class B {
    A* owner
}

这些类在不同的头文件中,使用这种架构我必须包括:

  • B.h in A.h
  • A.h in B.h

Aaaand我得到了循环依赖。我可以通过前向声明解决这个问题,但我想解决设计问题。 (如果可能的话。)

如果没有前瞻性声明,A&#39容器中的B-s如何访问A?

或者是前瞻性宣言的唯一途径?

2 个答案:

答案 0 :(得分:1)

你说:

  

这些类在不同的头文件中,使用这种架构我必须包括:

     
      
  • B.h in A.h
  •   
  • A.h in B.h
  •   

不,你没有。

前向声明就足够了,因为你在A.h中使用B*而在B.h中使用A*

A.H

class B;
class A {
    container<B*> c
}

B.h

class A;
class B {
    A* owner
}

答案 1 :(得分:1)

  1. 使用前向声明。这限制了你无法访问内联函数(在标题中)中的类成员,但这很好地适用于指针。

  2. 使用模板设计

  3. 使用获得所需接口的共享基类。