我有以下情况:
在项目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...
}
答案 0 :(得分:1)
这里没有足够的信息来回答。
如果A3想要调用Obj2.test(),那么
开始使用一些全局的东西来填充A2并从A3回来可能不是一个好主意。
如果A3中只有一种方法需要调用A2,则A2可以成为该方法的成员吗?所有来电者都有A2(或者他们能得到一个?)。
A2测试()的功能可以去其他地方吗?