如何创建模板化类对象的数组?

Cha*_*dNC 9 c++ arrays templates

我已经有很长一段时间没有做过任何C++编程了,我决定在业余时间把它搞砸一下,所以我决定给我写一个小数据库程序只是为了好玩,我在创建时遇到了麻烦一组模板化的类对象.

我所拥有的是这个类,我想用它来表示数据库记录中的字段.

template <class T, int fieldTypeId>
class Field
{
private:
    T field;
    int field_type;
public:
    // ...
};
Run Code Online (Sandbox Code Playgroud)

我想使用该类的数组来表示使用此类的数据库中的记录.

class Database_Record
{
private:
    int id;
    Field record[];
public:
    Database_Record(int);
    Database_Record(int, Field[]);
   ~Database_Record();
};
Run Code Online (Sandbox Code Playgroud)

我坚持的地方是在类中创建数组,Database_Record因为这是一个模板化类对象的数组,每个元素可能是不同的类型,我不知道我是否需要声明数组因此.我正在努力做甚至可能,还是我错误的方式?任何帮助将不胜感激.

Nee*_*asu 15

Field<T1>并且Field<T2>是两种完全不同的类型.要在矢量中处理它们,您需要在某处进行序列化.你可以写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
    }
};
Run Code Online (Sandbox Code Playgroud)

然后保持vectorAbstractField.也用vector而不是[].使用AbstractField*而不是AbstractField写入至少一个纯虚拟AbstractField.

你可以制作AbstractField纯虚拟的析构函数.并且不要忘记删除所有AbstractFields.在~Database_Record()

  • 谢谢!我认为你的答案让我朝着正确的方向前进. (2认同)