这是对之前提出的问题的后续处理。
LIB_A
我在外部库中有这个基类,比如LIB_A。
class Instrument
{
// ...
}
LIB_B
我在另一个外部库中有这个派生类,比如LIB_B,它当然引用了 LIB_A。
class Bond : public Instrument
{
// ...
};
在LIB_B中,我还有一个Trader
类,它拥有一个指向它正在使用的键的指针。
class Trader
{
public:
// ...
Bond* _bond;
};
LIB_C
我不能触摸LIB_A或LIB_B。
在我自己的代码中,第三个“库”(我在这里松散地使用这个术语),比如LIB_C,我正在尝试创建一个指向aTrader
的Bond
指针的类,即
class TradeHelper
{
public:
TradeHelper(Bond** bondPtr): _bondPtr(bondPtr) {}
Bond** _bondPtr;
};
它是由
Trader* t; // assume this is given and not null
TradeHelper* th = new TradeHelper(&(t->_bond))
旁白(无需阅读)
为什么会有如此复杂的方案?嗯,Trader::_bond
可以改变,并且TradeHelper
需要知道那是什么Trader
,_bond
在任何时候。所以本质上,链接TradeHelper
到一个. 这就是为什么,如果我有按自己的方式做事的自由,我会完全按照描述的那样做——将两者联系起来:Trader
class TradeHelper
{
public:
TradeHelper(Trader* t): _trader(t) {}
Trader* _trader;
};
它是由
Trader* t; // assume this is given and not null
TradeHelper* th = new TradeHelper(t);
并简称为Bond
via _trader->_bond
。
唉,由于历史和事物的原因,我唯一可以用来构建的东西TradeHelper
是指向 的指针Trader::_bond
,而不是它Trader
本身。因此我使用了双指针。
问题
好吧,正如所描述的,一切都会正常工作。但真正的问题是LIB_C不能引用LIB_B,只能引用LIB_A。那意思是,TradeHelper
不能知道Bond
,只有Instrument
。我的示例重写,现在看起来像这样:
class TradeHelper
{
public:
TradeHelper(Instrument** instPtr): _instPtr(instPtr) {}
Instrument** _instPtr;
};
这就是问题所在,当我构建它时:
TradeHelper* th = new TradeHelper(&(t->_bond));
正如我在这个问题Bond**
中了解到的,从to没有隐式转换Instrument**
。
我想这个抽象问题与我之前提出的问题非常相似:如果我被允许,我如何将指向派生类指针的指针作为指向基类指针的指针传递假设指针可以安全使用?在上一个问题中,我寻找了我做错了什么,并且了解到,我觉得我需要更详细地描述我的情况,以便任何人都能够提出前进的方向。
改写一下,我希望对象 X 始终知道另一个对象 Y 的成员“在哪里”,但该成员是派生类,而对象 X 只知道基类。
我已经修改了指针引用和强制转换,但似乎无法找到出路。