子类化 QVector<T>

Subclassing QVector<T>

本文关键字:gt lt 子类 QVector      更新时间:2023-10-16

这是我的问题:我想将QVector子类化,以便添加一些特定于我的上下文的函数。

天真的方法是:

class ClassVector : public QVector<Class> { ... }

但这里的问题是,当我需要调用QVector上的几个函数中的一个,这些函数会返回新的QVector(或&到它自己):

ClassVector cv1, cv2;
auto sum = cv1 + cv2;

这是有效的,但和是QVector,因为运算符+返回QVector。

有没有简单的方法让它以某种方式返回ClassVector?

我不想对结果调用repret_cast:/

如果重要的话,我只向ClassVector添加函数,不添加数据成员。

谢谢你的帮助。

如果新的operator+返回不同的类型,您当然可以重新实现它。

#include <QVector>
#include <iostream>
class ClassVector : public QVector<int>
{
public:
    typedef QVector<int> base_type;
    ClassVector operator+ (const ClassVector& other) const
    {
        ClassVector sum(*this);
        static_cast<base_type&>(sum) += other;
        return sum;
    }
};
int main()
{
    ClassVector cv1;
    cv1.append(1);
    cv1.append(2);
    cv1.append(3);
    ClassVector cv2;
    cv2.append(11);
    cv2.append(12);
    ClassVector sum = cv1 + cv2;
    for (auto&& v : sum)
        std::cout << v << std::endl;
}

另一种选择是为从QVector<Class>ClassVector的转换提供一个隐式构造函数。类似的东西

class ClassVector : public QVector<int>
{
public:
    typedef QVector<int> base_type;
    ClassVector() {}
    // Allow to convert a QVector<int> into a ClassVector.
    ClassVector(const QVector<int>& other) : QVector<int>(other) {}
    // ... possibly other constructors + assignment operator
};

也适用于您的情况。

然而,如果您不向ClassVector添加新状态,我也会使用一个免费函数。