我有一个这样的类结构:
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*>
它,在我的应用程序中将是逻辑错误。我想使其逻辑上正确,以便其他开发人员可以更轻松地阅读和理解我的代码。
我希望有人阅读了这篇全文,可以对我有所帮助。
您可以创建一个QList<CustomA*> list
。这样,您可以向CustomA
包括的所有子类添加指针CustomC<whateverClass>
。
加上: list.append( new CustomC<whateverClass> );
但是请记住,由于调用对象时new
也必须使用delete
对象,但是由于使用的是QT,您可以给新对象一个父对象,并在删除其父对象时将其删除。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句