如何创建一个可以在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. 我可以在C++中创建一个不同大小的向量数组吗?
- 3. 在同一个类中创建一个类的对象时出现C++错误?
- 4. 不同类型的对象在同一个向量数组中?
- 5. 在构造函数中从已保存的对象中创建一个对象
- 6. 在一个for循环中创建不同类的新对象
- 7. Android - 创建一个可变对象类型的数组
- 8. 我可以创建一个构造方法的对象,当我创建C#类
- 9. C#:创建不存在于不同列表中的对象
- 10. 创建一个数组对象数组?
- 11. 是否可以创建一个保存数组列表对象的常规数组?
- 12. 在另一个类中创建一个类的对象的数组MATLAB
- 13. 在包含对象值的对象中创建一个数组
- 14. 如何创建一个可以容纳不同类型对象的列表?
- 15. 创建可以像数组和对象一样使用的JavaScript数组对象
- 16. 是否可以在C#中的参数名称中创建一个对象?
- 17. 成员函数是否可以创建同一个类的对象?
- 18. 如何将创建到不同类中的对象创建到数组中
- 19. 创建类对象数组
- 20. 创建数组类对象
- 21. 我可以为动态数组列表超类的类型对象创建一个子类对象吗?
- 22. 在Ruby对象类中创建一个数组
- 23. 从一个数组(对象)中创建一个数组(对象)的阵列(值)
- 24. 在另一个C#类中创建一个对象?
- 25. 创建I类对象数组创建
- 26. 在会话中保存一个已经创建的对象
- 27. iOS对象数组:在一个函数内部创建一个对象数组
- 28. LINQ表达式使用不同的对象类型创建一个数组
- 29. 热的创建类的对象数组到另一个类
- 30. 我可以在C中创建一个Char指针数组吗?
然而,这只有一个类型每个实例。我不确定如何在一个实例中实现可以存储不同数据类型的容器。也许通过使用功能模板? – Nils 2010-05-04 12:16:00