我已经有一段时间没有做任何C++编程了,所以我决定在业余时间里花点时间处理一下,所以我决定为我写一个小数据库程序只是为了娱乐,而我在创建时遇到了麻烦模板化类对象的数组。
我拥有的是这个类,我想用它来表示数据库记录中的一个字段。
template <class T, int fieldTypeId>
class Field
{
private:
T field;
int field_type;
public:
// ...
};
我想使用该类的数组来表示使用该类的数据库中的记录。
class Database_Record
{
private:
int id;
Field record[];
public:
Database_Record(int);
Database_Record(int, Field[]);
~Database_Record();
};
我受困的是在
Database_Record
类中创建数组,因为这是模板化类对象的数组,每个元素可能具有不同的类型,因此我不确定如何声明该数组。我正在尝试做的事情是可能的还是我做错了方法?任何帮助将不胜感激。 最佳答案
Field<T1>
和Field<T2>
是两种完全不同的类型。要在 vector 中对待它们,您需要在某个地方进行泛化。您可以编写AbstractField
和
struct AbstractField{
virtual ~AbstractField() = 0;
};
template<class T,int fieldTypeId>
class Field: public AbstractField{
private:
T field;
public:
const static int field_type;
public:
virtual ~Field(){}
};
class Database_Record{
std::vector<AbstractField*> record;
public:
~Database_Record(){
//delete all AbstractFields in vector
}
};
然后保留
vector
的AbstractField
。也可以使用vector
而不是[]
。使用AbstractField*
代替AbstractField
,并在AbstractField
中至少写入一个纯虚函数。您可以将
AbstractField
的析构函数设为纯虚拟的。并且不要忘记删除所有AbstractField
。用~Database_Record()
关于c++ - 如何创建模板类对象的数组?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12009314/