我使用阿庫具有許多類型,其全部由相同的2個接口派生:存儲多重繼承在容器對象
class Huey : public IDuck, public ICartoonCharacter
{
...
};
class Dewey : public IDuck, public ICartoonCharacter
{
...
};
class Louie : public IDuck, public ICartoonCharacter
{
...
};
我想存儲在包裝上述所有類型的對象類和包裝類中的對象粘貼到容器中。當然,我應該能夠從我的包裝類中調用屬於這兩個接口的方法。
我在這裏有什麼選擇?我能想到的存儲IDuck *
在我的包裝和
- 的dynamic_cast-ING使用類似
boost::any
同時使我的包裝類模板,與一對夫婦的static_asserts
以保證模板參數ICartoonCharacter
,或 - 繼承自
IDuck
和ICartoonCharacter
。
但無論選擇特別上訴。有任何想法嗎?
two interfaces, multiple inheritance combine into one container?是一個相關的問題,但詹姆斯甘孜的回答沒有爲我工作,因爲我無法改變的3類。
編輯:不要經常使用多重繼承,忘記語法。現在從兩個接口繼承public
ly。
編輯:現在使用的dynamic_cast代替的static_cast(這將無法正常工作)。
編輯:我發現這兩個邁克·西摩的馬蒂厄和M的答案有前途的。一旦我完成了編碼,我會接受他們的答案之一。謝謝!
不能從'IDuck *'的static_cast到不相關類型的'ICartoonCharacter *'。你可以通過dynamic_cast提供'IDuck'至少有一個虛函數。 –
如果可以使用'dynamic_cast',我通常會使用第一個選項(請參閱上面的@SteveJessop註釋)。 –
我不確定,但我認爲,即使您的孩子班級不能從單親父母繼承(他們繼承了當前的父母),您仍然可以從引入這樣的班級中受益(例如'ICartoonDuck')。 )您可以將ICartoonDuck存儲在您的容器中,而不用擔心內存佈局問題。 (儘管如此,你仍然需要不安全的強制轉換;這仍然是一個黑客攻擊)。 – yzt