私有(隐藏)QSharedData

Seb*_*ski 3 c++ qt private-members qshareddata

我有一个类,它有一些我希望从调用者隐藏的数据成员(因为包含其类型的头显着增加了编译时间,并且它需要使用此类的每个项目添加其包含路径的附加路径).

该类用于QSharedDataPointer存储此数据.这样就可以使用默认的复制构造函数进行复制.

这个类的基本结构是:

class MyClass {
private:
  QSharedDataPointer<MySharedClassData> m_data;
};
Run Code Online (Sandbox Code Playgroud)

如果没有在同一个头文件中定义MySharedClassData(继承自QSharedData),是否有任何花哨的技巧?或者还有其他隐藏数据字段的好方法吗?

我已经尝试了前向声明,MySharedClassData但这没有用(尽管事实m_data是这样private).

我目前可以解决的唯一解决方案是声明m_data为,QSharedDataPointer<QSharedData>但是每次我想要访问它时我都需要转换数据成员.有更好的解决方案吗?

tib*_*bur 6

只要构造函数和析构函数未在头文件中定义,前向声明就应该正常工作.以下类在我的计算机上编译:

#ifndef MAIN_WINDOW_HXX
#define MAIN_WINDOW_HXX

#include <QMainWindow>
#include <ui_MainWindow.h>

#include <QSharedDataPointer>

class MySharedClassData;

class MainWindow : public QMainWindow, private Ui_MainWindow {
    Q_OBJECT
public:
    explicit MainWindow(QWidget *parent = 0, Qt::WindowFlags flags = 0);
    virtual ~MainWindow();

    QSharedDataPointer<MySharedClassData> m_data;

};

#endif
Run Code Online (Sandbox Code Playgroud)

如果你试图内联你的构造函数/析构函数,那么你可能会收到一个:C2027: use of undefined type 'type'在VS下.