C ++模板和继承

精神开

我有一个这样的类结构:

class MyImportantClass {};


class BaseA 
{
public:
  virtual void myFunction();
};

class CustomA : public BaseA
{
public:
  virtual void myFunction();
};

class CustomB : public CustomA
{
public:
  virtual void myFunction();
};

class CustomC : public CustomB
{
public:
  virtual void myFunction();
};


因此,从派生的类CustomB需要创建从派生的类的对象MyImportantClass另外CustomC需要创建从派生的类的对象CustomB

目前,我从Custom类派生并覆盖了虚函数。但是除了创建新对象外,几乎所有代码都是相同的。

现在,我决定使用模板。我的班级现在看起来像这样:

class BaseA 
{
public:
  virtual void myFunction();
};

class CustomA : public BaseA
{
public:
  virtual void myFunction();
};

template <class T>
class CustomB : public CustomA
{
public:
  virtual void myFunction();
};

template <class T, class ...temps>
class CustomC : public CustomB<T>
{
public:
  virtual void myFunction();
};

但是现在我有一个问题,如果我想创建一个CustomB我不能使用派生类对象的列表QList<CustomB>(是的,我使用Qt,所以我要使用QList)我必须使用QList<CustomB<SomeMyImportantClassDerivedClass>因此,我需要一些方法而不将templateparameter传递给CustomB如果我使用QList<CustomA*>它,在我的应用程序中将是逻辑错误。我想使其逻辑上正确,以便其他开发人员可以更轻松地阅读和理解我的代码。


我希望有人阅读了这篇全文,可以对我有所帮助。

大卫·范·里恩(David Van Rijn)

您可以创建一个QList<CustomA*> list这样,您可以向CustomA包括的所有子类添加指针CustomC<whateverClass>

加上: list.append( new CustomC<whateverClass> );

但是请记住,由于调用对象时new也必须使用delete对象,但是由于使用的是QT,您可以给新对象一个父对象,并在删除其父对象时将其删除。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章