如何創建一個可以在C++中保存不同類的對象的數組?創建一個數組,可以在C++中保存不同類的對象
5
A
回答
1
如果要創建自己的模型,請使用模板和運算符重載將對指針/數組的訪問包裝到一起。下面是一個小例子:
#include <iostream>
using namespace std;
template <class T>
class Array
{
private:
T* things;
public:
Array(T* a, int n) {
things = new T[n];
for (int i=0; i<n; i++) {
things[i] = a[i];
}
}
~Array() {
delete[] things;
}
T& operator [](const int idx) const {
return things[idx];
}
};
int main()
{
int a[] = {1,2,3};
double b[] = {1.2, 3.5, 6.0};
Array<int> intArray(a, 3);
Array<double> doubleArray(b, 3);
cout << "intArray[1]: " << intArray[1] << endl;
}
12
您可以使用boost::any
或boost::variant
(兩者之間的比較:[1])。
另外,如果「不同類的對象」有一個共同的祖先(比如,Base
),你可以使用std::vector<Base*>
(或std::vector<std::tr1::shared_ptr<Base> >
),並將結果轉換到Derived*
當你需要它。
+1
還有助推:變種。但我不會推薦這種方法,除非你真的想要保持不相關類的對象。否則選項2可能會更好。 – 2010-05-04 11:25:41
+0
如果集合是已知的,我會推薦'Variant' over'Any'。靜態檢查是一個巨大的吸引力。這也是一個更快,這是一個不錯的獎金。 – 2010-05-04 12:52:40
3
2
看一看boost::fusion這是一個STL-翻版,但有能力存儲容器中的不同數據類型
相關問題
- 1. C++一個對象(創建)在另一個類中的數組
- 2. 我可以在同一個類中創建對象嗎?
- 3. 在c#中創建數據對象以保存表中的值
- 4. 在C++中創建一個類對象的數組
- 5. 在不同的類中創建內部類對象數組
- 6. 在目標c中創建一個數組,該目標可用於創建數組的類的所有對象
- 7. C++創建對象數組(來自不同的類)
- 8. 我可以在C++中創建一個不同大小的向量數組嗎?
- 9. 可以將不同類型的對象放在一個數組中嗎?
- 10. 在同一個類中創建一個類的對象時出現C++錯誤?
- 11. 不同類型的對象在同一個向量數組中?
- 12. 在構造函數中從已保存的對象中創建一個對象
- 13. Android - 創建一個可變對象類型的數組
- 14. 在一個for循環中創建不同類的新對象
- 15. 我可以創建一個構造方法的對象,當我創建C#類
- 16. 創建不同對象的數組
- 17. C#:創建不存在於不同列表中的對象
- 18. 如何在另一個類的不同包中創建一個類的對象
- 19. 創建一個數組對象數組?
- 20. 是否可以創建一個保存數組列表對象的常規數組?
- 21. 在另一個類中創建一個類的對象的數組MATLAB
- 22. 修改保存在數組中的動態創建對象
- 23. C++保持數組中類的對象
- 24. 在包含對象值的對象中創建一個數組
- 25. 創建可以像數組和對象一樣使用的JavaScript數組對象
- 26. 如何創建一個可以容納不同類型對象的列表?
- 27. 是否可以在C#中的參數名稱中創建一個對象?
- 28. 成員函數是否可以創建同一個類的對象?
- 29. 創建數組類對象
- 30. 如何將創建到不同類中的對象創建到數組中
然而,這隻有一個類型每個實例。我不確定如何在一個實例中實現可以存儲不同數據類型的容器。也許通過使用功能模板? – Nils 2010-05-04 12:16:00