我有,我想看看這樣一個基類:如何獲得C++構造函數中的多態行爲?
class B
{
// should look like: int I() { return someConst; }
virtual int I() = 0;
public B() { something(I()); }
}
被強制派生類重寫I
並迫使其點的每個對象被創建時被調用。這被用來做一些簿記,我需要知道什麼類型的對象正在構建(但我否則將當前對象作爲基類)。
這不起作用,因爲C++不會讓你從構造函數中調用一個抽象的虛函數。
有沒有辦法獲得相同的效果?
基於this link它似乎是答案是沒有辦法得到我想要的東西。然而它說的是:
簡短的回答是:沒有。基類不知道它是從哪個類派生出來的,這也是一件好事。
[...]
也就是說,直到構造函數Derived1 :: Derived1開始,對象纔會正式成爲Derived1的實例。
但是在我的情況,我不想知道它爲,但它會成爲。事實上,只要用戶可以(事後)將其映射到一個班級,我甚至不關心我回來的東西。所以我甚至可以使用類似返回指針的東西並且避開它。
(現在回讀該鏈接)
閱讀此:http://stackoverflow.com/questions/1425695/1426834。 您可以使用PIMPL。 – 2009-09-21 10:54:17