子类化 QVector<T>
Subclassing QVector<T>
这是我的问题:我想将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
添加新状态,我也会使用一个免费函数。
相关文章:
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 呼叫运营商<<临时
- 如何防止clang格式在流运算符调用之间添加换行符<<
- <<操作员在下面的行中工作
- EASTL矢量<向量<int>>连续的
- C - 创建矢量&lt; vector&lt; double&gt;&gt;矩阵具有分配而不是inizializ
- 为什么将此对向量&lt; map&lt; int,int&gt;&gt;中的地图进行更新.失败
- C :对矢量进行排序&lt; struct&gt;(结构有2个整数)基于结构的整数之一
- 明确的专业化“ CheckIntmap&lt;&gt;”实例化
- 什么是模板&lt;&gt;inline bla bla
- 编辑C Qlist&lt; object*&gt; gt;QML代码和一些QML警告中的模型
- eigen :: llt&lt;eigen :: matrixxd&gt;具有不完整的类型
- 错误,包括&lt; ctype&gt;在原子上使用C 11
- std::vector<;uint8_t>;当C++11/14启用时,手动复制而不是调用memcpy
- 如何加入向量&lt; int&gt;到C 中的单个INT
- 是std :: set&lt; std :: future&gt;不可能存在
- 是numeric_limits&lt; int&gt; :: is_modulo从逻辑上矛盾
- opencv 2.4.7在iOS错误背景_segm.hpp #include&lt; list&gt;未找到
- 在修改列表后,std :: list&lt; t&gt; :: end()的值是否会更改
- ///<评论></评论>在Visual Studio中