求一个模板编程问题
我想写一个数组,里面可以存放任意类型的数据。但是不会实现。求高手指导啊~
代码如下:
#include <vector>class Base{};//都继承Baseclass A:public Base{};class B:public Base{};class C:public Base{};enum{ enum_A = 0,//分别都对应A,B,C。 enum_B, enum_C, enum_max};template<int Tcount>class Array{ Base* m_BaseArray[Tcount];public: Array() { for (int i = 0 ;i < Tcount; ++i) { m_BaseArray[i] = NULL; } } int static_size() {return Tcount;} template<int type_id,class TypeData> void insert(TypeData& data) { m_BaseArray[type_id] = &data; } //能不能预先做下处理,这里直接返回继承类的类型。 Base& operator[] (int index) { return *m_BaseArray[index]; } };int main(){ Array<enum_max> arr; arr.insert<enum_A>(A()); arr.insert<enum_B>(B()); arr.insert<enum_C>(C()); //这里的arr[1]是class Base。我希望可以得到class B。 arr[1];}
template<int type_id,class TypeData>
void insert(TypeData& data)
{
m_BaseArray[type_id] = &data;
}
//能不能预先做下处理,这里直接返回继承类的类型。
template<class TypeData>
TypeData& getElement (int index)
{
return *(dynamic_cast<TypeData*>(m_BaseArray[index]));
}
//能不能预先做下处理,这里直接返回继承类的类型。
Base& operator[] (int index)
{
return *((m_BaseArray[index]));
}
};
int main(int argc, _TCHAR* argv[])
{
Array<enum_max> arr;
arr.insert<enum_A>(A());
arr.insert<enum_B>(B());
arr.insert<enum_C>(C());
//result : I'm B。
arr.getElement<B>(1).echo() ;
//result : I'm B。
arr[1].echo();
return 0;
}