c++ - 私有(private)(隐藏)QSharedData

标签 c++ qt private-members qshareddata

我有一个类,它有一些我想对调用者隐藏的数据成员(因为包括它们类型的 header 会显着增加编译时间,并且需要每个使用此类的项目添加一个额外的路径到它们的包含路径)。

这个类使用QSharedDataPointer来存储这些数据。这样就可以使用默认的复制构造函数进行复制。

这个类的基本结构是:

class MyClass {
private:
  QSharedDataPointer<MySharedClassData> m_data;
};

定义MySharedClassData 的情况下,有什么花哨的技巧可以做到这一点吗? (继承自 QSharedData )在同一个头文件中?或者还有其他隐藏数据字段的好方法吗?

我已经尝试过 MySharedClassData 的前向声明但这没有用(尽管 m_dataprivate )。

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

最佳答案

只要您的构造函数和析构函数未在 header 中定义,前向声明就应该起作用。以下类在我的计算机上编译:

#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

如果您尝试内联您的构造函数/析构函数,那么您可能会收到:C2027: use of undefined type 'type' under VS。

关于c++ - 私有(private)(隐藏)QSharedData,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9176191/

相关文章:

c++ - C++ 程序中的数据库

c++ - 私有(private) C++ 成员函数与 C 函数

qt - 如何在 Qt5.5 qml TreeView 中右键单击时显示上下文菜单

qt - QIcon/QImage 内存泄漏?

c++ - 如何在没有 QT 应用程序的情况下使用 QTimer

c++ - 初始化类和列表

c++ - 使用类中的方法作为运算符将值分配给类的私有(private)成员

c++ - POCO C++ - NET SSL - 如何发布 HTTPS 请求

c++ - 如何通过 val 从 std::deque 中删除函数指针?

c++ - 有没有办法在 QScriptEngine#pushContext/popContext 之外维护 Qt 脚本上下文环境?