我找了一個很好的模式來實現如下:C++:成員參照父
class Outer;
class Inner
{
Outer * m_outer;
public:
InitOuter(Outer * o) { m_outer = o; }
}
class Outer
{
Inner m_inner;
public:
Outer()
{
m_inner.InitOuter(outer);
}
}
- 內應始終以外
- m_outer參考創建永遠不會爲 的
Inner
不幸的是,一生中
m_outer
不能既不是參考也不是不可變的指針,如下面的初始化無效: Inner::Inner(Outer & o) : m_outer(o) {}
Outer::Outer() : m_inner(*this) {}
因爲在的m_inner
初始化,Outer
沒有被完全構造並由此this
是無效的(並且也可以改變在進一步初始化期間)。
我發現的唯一選擇是使Inner
的構造函數非公開,的朋友。這有點好一些,但「朋友」關係似乎是強大的(因爲通常內部類應該封裝功能)。
你如何實現這個?
動機:在我的C++的理解,「外」還沒有完全建立,所以訪問this
可能在法律上引發未定義行爲(任何人都可以證實這一點 - 甚至更好,它是不是這樣的?)。
不,我不需要Inversion Of Control這裏。真的,謝謝你,但不。
我省略了諸如隱藏副本CTor +賦值等細節。
我不知道IOC的含義。 – 2010-11-01 14:16:21
@Johannes Schaub我也是。但我從google的結果中挑選了「國際奧委會」的「反控制」。 – 2010-11-01 14:20:45
恩,從我對國際奧委會的理解,二者注入和建設者注入都是*國際奧委會的實施* ...難以避免,如果在內蒙古的任何時候你要委託一些東西到外... – Nim 2010-11-01 14:37:40