在不相关的类中使用对象

时间:2010-10-11 14:35:11

标签: c++

我有以下情况:

在项目A中,一个对象(比如A1类的Obj1)实例化了A2类的Obj2。

然后,从Obj1,通过许多代码路径,可以实例化对象Obj3(类A3)。 A3课程在另一个项目中。

从Obj1的主方法到实例化类A3的对象的堆栈跟踪是20个深度调用,并且代码中至少有100个位置调用实例化A3类的函数。

现在我想在类A2(比如test())中添加一个非静态方法,并且能够从类A3的所有实例中调用Obj2.test()(而不是A2 :: test())。 / p>

我怎么能以最合理的方式解决这个问题?

编辑: 一些代码:

 class A2
    {
      //...
      A2(string,string,...);
      double test();
    };

    A2::A2(string,string,...)
    {
      //...
    }

    double A2::test()
    {
      //return 4.2; //in reality it's more complicated
    }

    class A1{

    //...

      A2* Obj2;
    };

    A1::A1()
    {
      Obj2 = new A2(string,string,...);
    }

    A1:run()
    {
      //here there are many possible code paths (switches instantiating objects of other classes)
      //but all end up as: 
      A3* Obj3 = new A3();
      Obj3->test_wrapper();
    }

    class A3{
      //this is defined in another project, and I'd prefer that project doesn't reference A2 since A2  links against a couple of libraries...

      static double A3::test_wrapper();
    };

    static double A3::test_wrapper()
    {
      //if I had Obj2 here, I'd do:
      return Obj2.test();
      //but I don't... 
    }

1 个答案:

答案 0 :(得分:1)

这里没有足够的信息来回答。

  1. A1有A2或A3会员吗? A2或A3是否有A1成员?
  2. A2或A3实例化的论据是什么?
  3. 如果A3想要调用Obj2.test(),那么

    1. A3需要A2类成员
    2. A3需要具有类型A2成员的X类成员 - 可能应该通过X转发呼叫,但
    3. A3中需要调用测试的方法需要采用A2参数
    4. 该方法可以采用具有A2成员的参数X(再次,通过X前进)。
    5. 开始使用一些全局的东西来填充A2并从A3回来可能不是一个好主意。

      如果A3中只有一种方法需要调用A2,则A2可以成为该方法的成员吗?所有来电者都有A2(或者他们能得到一个?)。

      A2测试()的功能可以去其他地方吗?