这是我的问题:我想继承QVector,以便添加一些特定于我的上下文的功能。
天真的做法是:
class ClassVector : public QVector<Class> { ... }
但问题在于我需要在QVector上调用少数几个函数来返回新的QVector(或者自身):
ClassVector cv1, cv2;
auto sum = cv1 + cv2;
这是有效的但是 sum是QVector,因为operator +返回QVector。
是否有简单的方法让它以某种方式返回ClassVector?
在结果上调用reinterpret_cast不是我想要做的:/
如果它很重要,我只向ClassVector添加功能,没有数据成员。
感谢您的帮助。
答案 0 :(得分:2)
如果新的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
添加新状态,我也会使用免费功能。