我已经有一段时间没有做任何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
    }
};

然后保留vectorAbstractField。也可以使用vector而不是[]。使用AbstractField*代替AbstractField,并在AbstractField中至少写入一个纯虚函数。

您可以将AbstractField的析构函数设为纯虚拟的。并且不要忘记删除所有AbstractField。用~Database_Record()

关于c++ - 如何创建模板类对象的数组?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12009314/

10-10 13:41