gpt4 book ai didi

c++ - 子类化 QVector

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:42:51 24 4
gpt4 key购买 nike

这是我的问题:我想继承 QVector 以添加一些特定于我的上下文的函数。

天真的方法是:

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

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

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

这是有效的总和是 QVector,因为 operator+ 返回 QVector。

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

对结果调用 reinterpret_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 ,我也会选择免费功能。

关于c++ - 子类化 QVector<T>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25995642/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com