有人可以告訴我,並提供一個代碼示例,是否有可能創建一個數組,可以容納任何類型的對象,而無需在C++中使用繼承?我還沒有爲它編寫任何代碼,但例如,如果我有兩個類:RangedWeap和MeleeWeap,有沒有辦法將這些對象存儲在同一個數組中而不使用繼承?用於保存C++中的任何對象的數組?
2
A
回答
7
如果你想存儲對象,沒有。原因是數組將對象存儲在連續的內存中,並且每個存儲的對象的大小是相同的。這不一定適用於不同的類型。
有一個醜陋的方式來存儲void*
,但這將存儲指針,而不是對象。此外,這將是無用的,因爲所有類型的信息都會丟失。如何在世界範圍內確定void*
指向什麼(假設您沒有基類)?
0
你將有一個很難的兩個物體之間的區分,但鑑於你有一個方法,你可以使用一個union
:
struct A
{
int type; // to distinguish
...
};
struct B
{
int type;
...
};
union AB
{
int type;
A a;
B b;
};
AB array[] = {<whatever>};
之後,你必須檢查type
當您訪問,要知道你是否應該訪問每個元素中的a
或b
。
注意:你的對象應該是POD,除非你是根據@chris using C++11。
2
Boost.Any將啓用此功能,但它(可能?)在引擎蓋下使用繼承,如果你在意的話。
相關問題
- 1. 保存任務中引用的對象
- 2. 保存CloudKit中的對象數組
- 3. C++保持數組中類的對象
- 4. 用於數組對象的C++方法
- 5. 用於將C++對象保存到數據庫的庫
- 6. 如何在C#ASP.Net Sesssion中保存對象數組?
- 7. c#加載/保存對象或對象數組
- 8. 保存ActiveRecord對象的數組?
- 9. 保存ActiveRecords對象的數組
- 10. 保存數組的對象JQuery
- 11. 如何保存對象數組
- 12. C#保存對象
- 13. 將JSON對象保存在數組中
- 14. C#保存對象列表Vs的保存對象(從JSON)
- 15. c中的對象數組#
- 16. 父類的對象的動態數組來保存子對象
- 17. C++讀取file.dat中保存的對象
- 18. 關於添加到數組的對象中保留計數的問題Obj-C
- 19. 如何保存數組中的json對象?
- 20. 如何保存數組中的多個json對象
- 21. 保存Mailitem的對象或任何可用於調用已保存的Mailitem的屬性
- 22. 如何使用數據庫保存/保持對象的內存圖形對象?
- 23. 如何在對象數組中找到保存最高值的對象?
- 24. 用於Objective-C中用戶定義類的對象數組?
- 25. 引用C#中的對象數組PInvoke
- 26. 試圖保存爲對象數組,但一直保存爲數組數組
- 27. 如何在PHP中的對象中存儲對象數組?
- 28. 檢查是否存在鍵值中的任何對象的數組(對象數組)
- 29. 單獨保存一個對象數組
- 30. Android保存自定義對象數組
你不想使用繼承的特殊原因? – Kevin 2012-07-17 17:54:30
使用正確的繼承模型,並節省使用'void *'的工作頭痛。 – 2012-07-17 17:55:19
被告知遊戲引擎的繼承速度很慢 – Danny 2012-07-17 17:55:27