qt qsharedDatapointer多重继承钻石图案
Qt QSharedDataPointer Multiple Inheritance diamond pattern?
我在我的应用程序的.h文件中定义了2个类
class GroupElement : public QSharedData
{
public:
int Id;
int GroupIndex;
QString Title;
QSharedDataPointer<AccessDescriptor> pAccessDescriptor;
QString Owner;
};
class Class2 : public GroupElement
{
public:
QSharedDataPointer<QList<int> > Categories;
// ... many other class members
}
class3 : public QObject
{
Q_OBJECT
public:
template <class T> QSharedDataPointer<QList<T> > toTQList(QVariant qv );
//...more ....
}
在另一个功能中,我尝试将值分配给"类别"
QSharedDataPointer<Class2>
Class3::afunction(QVariantMap o)
{
QSharedDataPointer<Class2> getResult(new Class2());
getResult-> Categories = toTQList<int>(o["Categories"]);
// ... more code ...
}
编译代码如图所示时,编译器抱怨"类...没有成员命名为'ref'"。这通常表明我需要添加public qshareddata作为基类。但是在这种情况下,Class2已经源自将qsharedData作为基类的GroupElement。如果我将QsharedData添加到2类中,我会在" Class2"中获得警告消息"直接基本'qshareddata'无法访问。m在QT或C 方面的经验不足,无法知道如何解决。
帮助您将不胜感激。
QSharedDataPointer
具有非常特定的用例修改它,它分离,现在具有自己的独立副本。为此,QSharedDataPointer
中包含的对象必须从QSharedData
继承,该对象提供了工作所需的参考计数。
因此,您的困难与钻石图案无关,您只是无法将QList
直接存储在QSharedDataPointer
中。从您的示例中也不清楚这是您真正想做的。您实际上想实现什么设计?很可能是QSharedPointer
是您真正想要的。
我建议您阅读https://www.qt.io/blog/2009/08/25/count-with-me-how-many-smart-smart-pointer-classes-classes-does-does-qt-have-QT的智能指针类。
相关文章:
- 关于C++中具有多重继承"this"指针的说明
- C++中模板化异常类的多重继承
- 虚拟继承中是否存在多重继承?
- 如何在 c++ 多重继承中调用父非虚函数?
- 多重继承相同的方法名,没有歧义
- 使用enable_if解决多重继承歧义
- 多重继承导致虚假的模糊虚拟函数过载
- 多重继承和访问不明确的元素
- C++ 多重继承:使用基类 A 的实现实现基类 B 的抽象方法
- 多重继承中的派生类的行为类似于聚合
- 为什么我的 Hippomock 期望在使用多重继承时失败
- 带有此指针的模板类多重继承构造函数不起作用?
- 使用多重继承时出现编译错误
- 增强多重继承的序列化
- 多重继承:跳过'virtual'关键字并拒绝菱形层次结构的使用?
- 仅函数的多重继承 - 没有虚拟和 CRTP
- C++多重继承和鸭子类型
- 虚拟继承如何解决 c++ 中的多重继承(钻石)?它将走哪条路
- qt qsharedDatapointer多重继承钻石图案
- 多重继承钻石