fork download
  1. #include <iostream>
  2. #include <vector>
  3.  
  4. struct A;
  5.  
  6. struct B
  7. {
  8. B() : _a(nullptr) {}
  9.  
  10. void setA(A*a) { _a = a; }
  11. void genericFunction();
  12.  
  13. private:
  14. A* _a;
  15. };
  16.  
  17. struct A
  18. {
  19. void addB(B*b);
  20. void iterate();
  21. void specialFunction();
  22.  
  23. private:
  24. std::vector<B*> _b;
  25. };
  26.  
  27. void B::genericFunction()
  28. {
  29. std::cout << "From B::genericFunction: ";
  30. if (_a)
  31. _a->specialFunction();
  32. }
  33.  
  34. void A::addB(B* b)
  35. {
  36. _b.push_back(b);
  37. b->setA(this);
  38. }
  39.  
  40. void A::iterate()
  41. {
  42. for (auto b : _b)
  43. b->genericFunction();
  44. }
  45.  
  46. void A::specialFunction()
  47. {
  48. std::cout << "A::specialFunction()\n";
  49. }
  50.  
  51. int main()
  52. {
  53. B b1;
  54. B b2;
  55.  
  56. A a;
  57. a.addB(&b1);
  58. a.addB(&b2);
  59.  
  60. a.iterate();
  61. }
Success #stdin #stdout 0s 3472KB
stdin
Standard input is empty
stdout
From B::genericFunction: A::specialFunction()
From B::genericFunction: A::specialFunction()