QScopedPointer 是否隐藏了多重继承
Does QScopedPointer hide multiple inheritance
我在访问 PIMPL 设计的私密部分时遇到问题。"当然!"你应该是! 好吧,我正在编写一些功能测试,所以我不在乎我正在访问私有成员,好吗?:-)
为了达到目的,我使用指向私有实现的 QScopedPointer 设置了公共类,如下所示;
class CV {
...
private:
QScopedPointer<PrivateCV> const _d_ptr;
PrivateChartView * d();
const PrivateChartView *d() const;
};
PrivateCV * CV::d()
{
return _d_ptr.data();
}
const PrivateCV* CV::d() const
{
return _d_ptr.data();
}
私有位如下所示:
class PrivateCV : public QObject, public Ui_CVForm
{
Q_OBJECT
friend class MyTestClass;
public:
...
public slots:
void do_something();
}
似乎 MyTestClass 可以访问 PrivateCV 的 do_something() 成员函数,它获得如下(伪代码,obvs):
CV *cv = MyApp::get_a_cv();
PrivateCV *pcv = cv->d();
即它会称之为罚款:
pcv->do_something();
但我无法访问Ui_CVForm上的任何内容(从 uic 生成的 UI 类)。 Ui_CVForm(部分)如下:
class Ui_CVForm
{
public:
QGridLayout *gridLayout_2;
QGroupBox *groupBox;
QLineEdit *lineEdit;
};
这是否与函数 d() 或 QScopedPointer 的常量有关? 当我在CV内部时,我可以毫无问题地访问PrivateCV的UI表单元素。
void CV::and_another_thing()
{
d()->lineEdit->setText("wtfa");
}
任何指针(双关语)最受欢迎!
好吧,这原来是由于一些白痴(我)对不同库中的两个不同类使用相同的文件名。 测试库正在为不包含上述 lineEdit 之类的项目的Ui_CVForm选择一个标题,而 PrivateCV 正在使用另一个......因此,没有抱怨在编译时看不到标头。
相关文章:
- 关于C++中具有多重继承"this"指针的说明
- C++中模板化异常类的多重继承
- 虚拟继承中是否存在多重继承?
- 如何在 c++ 多重继承中调用父非虚函数?
- 多重继承相同的方法名,没有歧义
- 使用enable_if解决多重继承歧义
- 多重继承导致虚假的模糊虚拟函数过载
- 多重继承和访问不明确的元素
- C++ 多重继承:使用基类 A 的实现实现基类 B 的抽象方法
- 多重继承中的派生类的行为类似于聚合
- 为什么我的 Hippomock 期望在使用多重继承时失败
- 带有此指针的模板类多重继承构造函数不起作用?
- 使用多重继承时出现编译错误
- 增强多重继承的序列化
- 多重继承:跳过'virtual'关键字并拒绝菱形层次结构的使用?
- 仅函数的多重继承 - 没有虚拟和 CRTP
- C++多重继承和鸭子类型
- C++两次从文件保存对象读取多重继承
- QScopedPointer 是否隐藏了多重继承
- 由多重继承隐藏的嵌套类